2016-08-09 6 views
1

私は、属性privateを持つCustomerモデルを持っています。この属性は、データベース内の合計3人のユーザーにのみ表示されます。このメソッド(check_box)が3人のユーザのうちの1人によってチェックされると、顧客はそれらのユーザだけが見ることができます。条件付きレコードをループする

私は現在、このような顧客のすべての上にループしています:

<% @customers.where(:private => false).each do |single_customer| %> 

私の質問は、私はドンので@customers.each do |single_customer|に変更されます3ユーザーの一人がその:private => falseに署名されたとき、私は達成することができます方法ですがもうプライベート属性をフィルタリングする必要はありません。

答えて

1

ループのビルドアップを変更する必要があります。このコードは、メタプログラミングのビットですが、あなたはこのようにそれを行うことができます:あなたは、単にこれを行うビューで

# in the controller for example. 
@customers = Customer.where(private: false) 
@customers = Customer.all if current_user.is_my_special_user? 

を:あなたのコレクションが巨大である場合<% @customers.find_each do |customer| %>

  • は、パフォーマンスを向上させるためfind_eachを使用します。デフォルトで
  • は、あなたがあなたのユーザーがログインしている場合は検出private: false
  • 、あなたが@customers
+2

'メタprogramming'があるを上書きでしょうか? –

+0

彼は 'current_user'メソッドが定義されているのか、彼のクラスのロジックは知りません。したがって、メタプログラミングは、使用されるメソッドを参照します。 –

+1

完璧に動作します、ありがとう! '@customers = Customers..'の代わりに' Customer'が必要です。答えを受け入れました。 –

関連する問題