1

すべてレビューを持つことができる 3 つのモデルがあり、各レビューはユーザーに属している必要があります。ポリモーフィックな関連付け :as => :reviewable を使用していますが、各モデルのレビューを作成するためのロジックをどこに置くべきかわかりません。各レビューの CRUD は reviews_controller (または他のコントローラーのネストされた属性?) で処理する必要があると思いますが、レビューを各モデルに関連付けるにはどうすればよいですか?

モデル/ビュー/コントローラーの例をGoogleで見つけることができませんでした。おそらく、それは物事を片付けるのに大いに役立つでしょう。

ありがとう、セザール

4

2 に答える 2

2

レビュー可能なオブジェクトのコントローラー内でオブジェクトを処理する際の問題は、各コントローラーで同じコードを何度も繰り返すことになります。さらに、コードはどこに置きますか?(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とそのネストされたオブジェクトのサポートの使用を検討することをお勧めします。 。

于 2009-03-09T21:47:32.270 に答える
0

モデルの更新であるため、モデルのコントローラーを通過する方が簡単です。さらに、レビューがどのモデルに属するかを間違えることはありません.

何をするか見てみましょうacts_as_commentable。自分でロールバックするよりも、再利用する方が簡単かもしれません。

http://github.com/jackdempsey/acts_as_commentable/tree/master

于 2009-02-19T00:31:10.487 に答える