显示操作路由错误导轨

时间:2014-05-04 02:55:34

标签: ruby-on-rails ruby

我收到此错误:

Failure/Error: visit event_url(event)
     ActionController::UrlGenerationError:
       No route matches {:action=>"show", :controller=>"events", :id=>#<Event id

我不知道为什么。

Rspec测试。

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?'}) %> 

模型。

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

控制器。

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

路线。

Events::Application.routes.draw do

  root 'events#index'
  resources :events

1 个答案:

答案 0 :(得分:1)

提供您的routes.rb文件。这似乎是路由中的问题。

要处理你的代码,routes.rb应该是这样的:

YourAppName::Application.routes.draw do
  resources :events
end

http://guides.rubyonrails.org/routing.html