Spencer Hire
Spencer Hire

Reputation: 763

Show Action Routing Error Rails

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

Answers (1)

Pavel Tkackenko
Pavel Tkackenko

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

Related Questions