ための方法を作成します。 is_referral?
とlabel
がAccount
クラスの両方のインスタンスメソッドですは、私は2つのモデルを持っている関連オブジェクト
def sorted
partition { |account| account.is_referral?}.each do |a|
a.sort! {|a,b| a.label <=> b.label}
end.flatten
end
:これは私がこれを使用する方法です。
だから私はUser.first.accounts.sorted
でソートされたアカウントを得ることができました。
私は私が何かをして、それを拡張スコープ作成した場合、これを行うことができています:
scope :filtered, lambda { |filter|
if filter == Listing::FILTER_INACTIVE
where("status = ?", Account::STATUS_INACTIVE)
elsif filter == Account::FILTER_ACTIVE
where("status = ?", Account::STATUS_ACTIVE)
end
} do
def sorted
partition { |account| account.is_referral?}.each do |a|
a.sort! {|a,b| a.label <=> b.label}
end.flatten
end
end
今私はUser.accounts.filtered(Account::FILTER_ACTIVE).sorted
を使用することができます。これは、scope.class
がActiveRecord::Relation
を返し、がArray
を返すためです。
scope :sorted, lambda { |object|
object.partition { |account| account.is_referral?}.each do |a|
a.sort! {|a,b| a.label <=> b.label}
end.flatten
}
しかし、これはnil.partition
ためNoMethodError
スロー:
何か助けていただければ幸いです。
アイデアのおかげで、私は結果として空の配列を取得しています。正確なrealtionは 'has_many:accounts、:through =>:calendars'ですが、あなたのメソッド(' Calendar'や 'User')をどこで定義しても、空の配列が得られます。 – shime
私はなぜこれを得ているのかを知り、あなたの投稿に説明を追加しました。もう一度ありがとう。 – shime