0

次のようなURLが欲しいのですが。

/ payroll / region / 1

TasksControllerのpayroll_list関数にマップしたいと思います。RESTも使いたいです。これを行うための最良の方法は何ですか?

どうもありがとう!

4

2 に答える 2

1

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動詞、そしてもちろん「編集」、「新規」などのデフォルトのアクションについても説明します。コントローラを大きく複雑にしようとしないでください。「スキニーコントローラー-ファットモデル」というモットーに従ってください。

于 2010-09-23T21:25:21.217 に答える
0

OK、それでより良い質問、それならこれかもしれません:

あなたの提案を使用するために、どうすればそれを取得できますか?

/ region / 1 / payroll

そして、そのマップをRESTfullyに次のように設定します。

プレフィックスが「payroll_」であるインデックス、新規などのタスクコントローラ?

このように:TasksController#payroll_indexまたはTasksController#payroll_new

于 2010-09-24T00:01:48.370 に答える