次のようなURLが欲しいのですが。
/ payroll / region / 1
TasksControllerのpayroll_list関数にマップしたいと思います。RESTも使いたいです。これを行うための最良の方法は何ですか?
どうもありがとう!
次のようなURLが欲しいのですが。
/ payroll / region / 1
TasksControllerのpayroll_list関数にマップしたいと思います。RESTも使いたいです。これを行うための最良の方法は何ですか?
どうもありがとう!
Railsがこれをどのように処理するかという慣習に従うほうがよいと思います。それでもこのような「奇妙な」URLの使用を主張し、今後の開発中に発生する可能性のある問題や頭痛を無視したい場合は、Refractionを使用してみてください。
失礼になりたくありませんが、現在、RESTfulURLがそのようになっている理由を理解していないようです。最初にこの背後にある設計を理解してから、アプリケーション/コントローラーとルーティングの設計を再考してください。私はあなたが啓発されるに違いない。
この例では、URLはおそらく。である必要が/regions/1/payrolls
ありmap.resources :regions, :has_many => :payrolls
ます。PayrollsController
次に、給与リストは-を持つことでレンダリングされますが、params[:region_id]
これは実際には理にかなっています(そして、おそらくURLレイアウトで達成しようとしたこと)。コードスニペット:
def index
if params[:region_id]
@region = Region.find(params[:region_id])
@payrolls = @region.payrolls
else
@payrolls = Payroll.all
end
end
それでも別の名前のURLでリソースを使用する場合は、次を使用します。
map.resources :regions do |regions|
regions.resources :tasks, :as => :payrolls
end
これにより、名前付きURLパーツ「payrolls」を使用して、ネストされたリソースがタスクコントローラーにマップされます。ただし、RESTfulロジックは、で給与モデルを処理する必要があることを意味するため、これはおそらく期待どおりに機能しませんPayrollsController
。そうしないと、奇妙なコードに遭遇する可能性があります。たぶんあなたのデザインはTasksController
間違っていますか?Railsは、payrollsという名前を付けても、タスクがタスクコントローラーに処理されることを期待している可能性があります。これは少なくとも混乱を招く可能性があります(ただし、実際にはこれらがタスクモデルであることを期待していないため、おそらく機能します)。
ところで-覚えておいてください:「restful」は、アプリケーションが「リソースフル」ルートを使用するだけでなく、リソース上の標準動詞に応答する必要があることも意味します。また、GET、PUT、DELETE、POSTのhttp動詞、そしてもちろん「編集」、「新規」などのデフォルトのアクションについても説明します。コントローラを大きく複雑にしようとしないでください。「スキニーコントローラー-ファットモデル」というモットーに従ってください。
OK、それでより良い質問、それならこれかもしれません:
あなたの提案を使用するために、どうすればそれを取得できますか?
/ region / 1 / payroll
そして、そのマップをRESTfullyに次のように設定します。
プレフィックスが「payroll_」であるインデックス、新規などのタスクコントローラ?
このように:TasksController#payroll_indexまたはTasksController#payroll_new