2010-06-24 2 views
1

Предположим, у меня есть простой блог-приложение для рельсов.Rails: model_url для пользовательских действий

У меня есть пользовательское действие, например page_views, которое показывает количество просмотров сообщения.

class PostsController < ApplicationController 

    def page_views 
    #show some page views 
    end 

end 

И есть также связанный с ним вид в папке app/views/Posts.

Теперь в routes.rb у меня есть:

map.resources :posts 

map.resources :posts, :collection => { 
             :page_views=> :get 
             } 

в моих постах show.html.erb файл У меня есть ссылка на page_views зрения:

link_to("View Page Views",page_views_posts_path + "/" + post.id.to_s) 

Другой paths:

page_views_posts_path(post) 
page_views_path(post) 
page_views_posts(post) 

Из-за того, что метод не найден или нет т URL, например:

http://localhost:3000/posts/page_views.#<posts:0xabcdef00> 

Я предполагаю, что URL должен быть:

http://localhost:3000/posts/page_views/1 

Итак, что я здесь отсутствует?

ответ

2

Если вы хотите предоставить page_views страницу для каждого просмотра у Вас должен объявить дополнительное действие не как метод сбора, но в качестве метода члена:

map.resources :posts, :member => { :page_views=> :get } 

Кроме того, если вы хотите, чтобы это для всех сообщений, а также (показать рейтинг таблица некоторых видов) добавить один и тот же параметр, как коллекции действия:

map.resources :posts, :member => { :page_views=> :get }, :collection => { :page_views => :get } 

Таким образом, вы будете иметь следующие маршруты генерироваться:

page_views_post_path(post) # for single post 
page_views_posts_path  # for all posts 

Вы можете проверить новые маршруты, выполнив следующую команду:

$ rake routes | grep page_views 

Вы получите только те, которые связаны с видом, учитывая тот факт, что вы не объявленные их для других контроллеров.

+0

который работал, спасибо. Я не видел метод участника. – cbrulak