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>

URLは次のようにする必要があります。

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 に答える