1

假设我有一个简单的 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)

导致找不到方法或 URL 不正确,例如:

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

我假设网址应该是:

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

那么,我在这里缺少什么?

4

2 回答 2

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

考虑到您没有为其他控制器声明它们,您将只获得那些关联的视图。

于 2010-06-24T06:05:19.197 回答
0

您还可以routes.rb像这样向资源添加自定义方法:

resources :posts do 
  collection do
    get :page_views
  end
end

并用于page_views_posts_path访问自定义方法。

于 2021-05-29T12:31:10.610 回答