Предположим, у меня есть events
контроллер.Если я запрашиваю /events
по GET
, он ответит действием index
в контроллере новостей, в этом представлении будут отображаться будущие события.
Я хочу добавить новое действие с именем past
, это похоже наindex
, которые возвращают массив Event
с, но с другим запросом.
Я добавил к routes.rb
этот фрагмент:
resources :events do
collection do
get :past
end
end
, а этот - к events_controller
:
def history
@events => Event.past
render :template => 'index'
end
Но когда я запрашиваю http://127.0.0.1:3000/events/past
, в браузере это не работает, в журнале выкидываются следующие строки:
Started GET "/events/past" for 127.0.0.1 at 2012-04-02 19:32:01 -0500
Processing by EventsController#show as HTML
Parameters: {"id"=>"past"}
И, наконец, у вас есть rake routes
вывод:
events GET /events(.:format) {:action=>"index", :controller=>"events"}
event GET /events/:id(.:format) {:action=>"show", :controller=>"events"}
past_events GET /events/past(.:format) {:action=>"past", :controller=>"events"}
contact_us_event POST /events/:id/contact_us(.:format) {:action=>"contact_us", :controller=>"events"}
GET /events(.:format) {:action=>"index", :controller=>"events"}
POST /events(.:format) {:action=>"create", :controller=>"events"}
new_event GET /events/new(.:format) {:action=>"new", :controller=>"events"}
edit_event GET /events/:id/edit(.:format) {:action=>"edit", :controller=>"events"}
GET /events/:id(.:format) {:action=>"show", :controller=>"events"}
PUT /events/:id(.:format) {:action=>"update", :controller=>"events"}
DELETE /events/:id(.:format) {:action=>"destroy", :controller=>"events"}
Другой тест - проверка маршрутов с помощью консоли Rails:
$ script/rails c
1.9.2-p318 :001 > rs = ActionController::Routing::Routes
1.9.2-p318 :002 > rs.recognize_path "/events/past", :method => :get
=> {:action=>"show", :controller=>"events", :id=>"past"}
Что не так?