假设我有简单的rails博客应用程序。
我有一个自定义操作,例如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)
导致找不到方法或网址不正确,例如:
http://localhost:3000/posts/page_views.#<posts:0xabcdef00>
我认为网址应为:
http://localhost:3000/posts/page_views/1
那么,我在这里缺少什么?
答案 0 :(得分: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
考虑到您没有为其他控制器声明它们,您将只获得那些相关的视图。
答案 1 :(得分:0)
您还可以像这样向 routes.rb
中的资源添加自定义方法:
resources :posts do
collection do
get :page_views
end
end
并使用 page_views_posts_path
访问自定义方法。