Reputation: 763
I'm getting this error:
Failure/Error: visit event_url(event)
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"events", :id=>#<Event id
I have no idea why.
Rspec Test.
require 'spec_helper'
describe 'Show Event' do
it 'shows a single event' do
event = Event.create(event_attributes)
visit event_url(event)
expect(page).to have_text(event.name)
expect(page).to have_text(event.description)
expect(page).to have_text(event.starts_at)
expect(page).to have_text(event.location)
expect(page).to have_text(event.posted_by)
end
end
Html Show Page.
<article>
<%= image_for(@event) %>
<header>
<h1><%= @event.name %></h1>
</header>
<h2>Description</h2>
<p>
<%= @event.description %>
</p>
<h3>Location</h3>
<p>
<%= @event.location %>
</p>
<h3>Posted By</h3>
<p>
<%= @event.posted_by %>
</p>
<h3>Starts At</h3>
<p>
<%= @event.starts_at %>
</p>
</article>
<%= link_to('All Events', events_path) %> |
<%= link_to('Edit', edit_event_path(@event)) %> |
<%= link_to('Delete', event_path(@event), method: :delete, data: {confirm: 'Are you sure?'}) %>
Model.
class Event < ActiveRecord::Base
validates :name, :description, :location, :starts_at, :posted_by, :image_file_name, presence: true
validates :name, :posted_by, :location, length: { maximum:30 }
validates :description, length: { minimum: 30 }
validates :image_file_name, allow_blank: true, format:{
with: /\w+\.(gif|jpg|png)\z/i,
message: 'must reference a GIF, JPG, or PNG imzge'
}
def self.organize
order('starts_at')
end
end
Controller.
class EventsController < ApplicationController
def index
@events = Event.organize
end
def show
@event = Event.find(params[:id])
end
def edit
@event = Event.find(params[:id])
end
def update
@event = Event.find(params[:id])
if @event.update(event_params)
redirect_to @event, notice: 'Event updated successfully.'
else
render :edit
end
end
def new
@event = Event.new
end
def create
@event = Event.new(event_params)
if @event.save
redirect_to @event, notice: 'Event created successfully.'
else
render :new
end
end
def destroy
@event = Event.find(params[:id])
@event.destroy
redirect_to events_path
end
private
def event_params
params.require(:event).permit(:name, :description, :posted_by, :location, :posted_at, :image_file_name)
end
end
Routes.
Events::Application.routes.draw do
root 'events#index'
resources :events
Upvotes: 0
Views: 73
Reputation: 953
Provide your routes.rb file. It seems like problem in routing.
To handle your code, routes.rb should be like this:
YourAppName::Application.routes.draw do
resources :events
end
http://guides.rubyonrails.org/routing.html
Upvotes: 1