現在ActiveRecord::Relation
オブジェクトによって取得されているレコードを変更したいクラスメソッドがあります。しかし、クラスメソッドで現在のスコープを参照する方法がわかりません。self
それをしません。
例:
class User < ActiveRecord::Base
...
def self.modify_those_records
#thought implicitly #to_a would be called on currently grabbed records but doesn't work
temp_users_to_a = to_a
...
end
end
私はそれを次のように使用します:
User.some_scope.modify_those_records
だからUser.some_scope
私に戻ってActiveRecord::Relation
、たくさんのUser
レコードが含まれています。次に、そのクラスメソッド内のこれらのレコードを変更して、それらを返します。
問題は、クラスメソッド内で「そのレコードのグループ」を明示的に参照する方法がわからないことです。
あなたが使用することができますcurrent_scope
:
def self.modify_those_records
current_scope.each do |user|
user.do_something!
end
end
管理者権限に基づいてユーザーを注文する場合は、ActiveRecordを使用することをお勧めします。
scope :order_admins_first, order('CASE WHEN is_admin = true THEN 0 ELSE 1 END, id')
User.some_scope.order_admins_first
このコードis_admin
は、usersテーブルにブール列があることを意味します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加