代码之家  ›  专栏  ›  技术社区  ›  cbrulak

Rails:自定义操作的模型URL

  •  1
  • cbrulak  · 技术社区  · 14 年前

    假设我有一个简单的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 文件我有一个链接到 页面视图 观点:

    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
    

    那么,我在这里错过了什么?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Eimantas    14 年前

    如果你想提供 page_views 对于每个视图,您应该声明额外的操作,而不是作为集合方法,而是作为成员方法:

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

    另外,如果您希望对所有文章都这样(显示某些排序的排名表),请添加与collection操作相同的参数:

    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
    

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