0

私のアプリには、Activity オブジェクトのリストを返す履歴メソッドを定義する User モデルがあり、ユーザーが実行した最後の N 個のアクションを示しています。UserController#history メソッドは、これをビューと関連付けます。

コードは次のようになります。

class UserController < ApplicationController
  def history
    user = User.find(params[:id])
    @history = user.history(20)
  end
end

class User < ActiveRecord::Base
  has_many :activities    

  def history(limit)      
      ...
  end
end

もちろん、routes.rb ファイルにも次の行を追加しました。

match '/user/:id/:action', :controller => 'user'

そのため、localhost:3000/user/8/history に移動すると、ユーザー 8 の履歴が表示されます。すべて正常に動作します。

Rails NOOB であるため、コードを簡素化できるこの状況に対する解決策があるかどうか疑問に思っていました。/user/8 がユーザー 8 のページにアクセスするための RESTful な方法である場合、/user/8/history がユーザー 8 で history() を呼び出すことによって返されるデータを表示する必要があることを Rails に伝えることは可能ですか?

4

2 に答える 2

2

まず、コントローラーに名前を付ける規則は、セッションなどの単一のリソースのみを対象としない限り、複数形です。

ルートで「ヘルパー」を使用したと思われるルートについて、resourcesできることは、ユーザーへのリソースルートにも、このような履歴を取得するためのメンバーアクションがあることを指定することです

resources :users do
  member do
    get :history
  end
end

これを行うためのよりクリーンな方法はないと思います

ここで確認できますhttp://guides.rubyonrails.org/routing.html#adding-more-restful-actions

于 2013-02-06T21:10:28.150 に答える
0

Rails標準に関する限り、これはあなたのケースで履歴を表示する正しい方法です. Rails では、コントローラはビ​​ューとモデルのミドルウェアであると想定されているため、アクションを定義することはhistory私には良いように思えます。

また、次のようにルートをより適切に指定できます。

resources :user do
  get 'history', :on => :member #it will generate users/:id/history as url.
end
于 2013-02-06T21:08:11.060 に答える