Скажем, у меня есть простое приложение блога направляющих.
И у меня есть пользовательское действие, как 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
Так, что я пропускаю здесь?
Если вы хотите предоставить страницу 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
Вы получите только те связанные представления, учитывая тот факт, что вы не объявили их для других контроллеров.