レビュー可能なオブジェクトのコントローラー内でオブジェクトを処理する際の問題は、各コントローラーで同じコードを何度も繰り返すことになります。さらに、コードはどこに置きますか?(7つの既存のアクションに便乗することによって)いくつかの非常に重いアクションメソッドを使用するか、次のようなアクションの作成を開始します。
new_review, delete_review, etc
これはRESTfulではなく、独自のコントローラーを懇願する深刻なコードの臭いです。
したがって、このような場合は、レビューコントローラーを用意し、URLにパラメーターを追加するか、非表示フィールドを使用してレビューが属するオブジェクトを示すことを検討します。
<%= f.hidden_field :reviewable_id, :value => @object.id %>
<%= f.hidden_field :reviewable_type, :value => @object.class %>
これは、レビューオブジェクトに対して実行する必要のある他の作業(現在のユーザーを作成者として保存するなど)がある場合に特に役立ちます。これは、モデルにプッシュできないすべてのロジックを保持するためです。一つの場所へ。関連するモデルのスコープを正しく設定し、それがユーザーに属していることを確認してください。そうしないと、ユーザーはURLを改ざんして、必要なものにレビューを追加できます(もちろん、ユーザーが送信したデータからオブジェクトを選択するすべての場所に適用されます)。
ただし、レビューオブジェクトが非常に軽量で、追加の処理を必要としない場合(つまり、投稿されたデータをオブジェクトに割り当てるだけの場合)、Rails2.3とそのネストされたオブジェクトのサポートの使用を検討することをお勧めします。 。