1

私のサイトでは、モデレーターはスパムコメントにフラグを立てることができます。これらのコメントにフラグが付けられると、それらは隔離され、通常のビューには表示されなくなりますが、管理コントロールパネルには表示されます。現時点では、次のような通常のビューからそれらを除外します。

@comments = Comment.where(:flagged => false)

コメントが含まれているすべてのコントローラーでこれを行いますが、その中には多くのコメントがあります。Railsでこれを処理するためのよりクリーンな方法があるように感じます。おそらくコメントモデルのどこかで、コメントをクエリするときに、フラグが設定されていないものだけを取得するように指定できます。もしそうなら、それはどのように行われますか?そして、それが不可能な場合でも、このコードを乾燥させる他の方法はありますか?

4

2 に答える 2

5

uはデフォルトのスコープを使用できます

default_scope where(:flagged => false)

http://apidock.com/rails/ActiveRecord/Base/default_scope/classを参照してください

スコープなしを使用すると、デフォルトのスコープを無視できます。http://apidock.com/rails/ActiveRecord/Base/unscoped/classを参照してください

すべてのレコードが必要なときにスコープをオーバーライドする必要がないため、デフォルトのスコープではなくスコープを使用することをお勧めします。すべての/フラグのないレコードをフェッチする頻度によって異なります。

于 2012-10-11T16:41:59.653 に答える
2

スコープを作成します(この例では「clean」という名前):

class Comment < ActiveRecord
  scope :clean, where(:flagged => false)
end

次に、以下を使用します。

@comments = Comment.clean

将来を見据えて、default_view呼び出すだけのクラスメソッドを追加しcleanて、代わりにそれを使用することもできます。default_view'default'を変更する必要があるため、メソッドを変更するだけです。

于 2012-10-11T16:38:09.977 に答える