データベースからスタッフではないすべてのユーザーを取得する必要があります。
class User < ActiveRecord::Base
has_one :staff
def is_staff?
staff != nil
end
end
class Staff < ActiveRecord::Base
attr_accessible :user_id
belongs_to :user
end
したがって、次のコードでこれを行うことができます。
User.all.select {|user| not user.is_staff? }
それはうまくいくようですが、データベースにこのロジックを入れたいのですが、この方法でソートしようとすると、何らかの理由で Heroku でエラーが発生します (sqlite を使用した開発ではこのエラーは発生しません):
NAME_SORT = ->(a, b) {
if a.first_name == b.first_name
a.last_name <=> b.last_name
else
a.first_name <=> b.first_name
end
}
User.all.select {|user| not user.is_staff? }.sort &NAME_SORT
何らかの理由で発生するエラーは次のとおりです。
ArgumentError: comparison of User with User failed
とにかく、スタッフであるすべてのユーザーを取得したい場合、それは簡単に思えます:
User.joins(:staff)
スタッフ以外のユーザーを簡単に取得する方法はありますか? たぶん、このようなものですか?
User.not_joins(:staff)
そして、実際には、ユーザーがスタッフまたは管理者ではない必要があります。
User.not_joins(:staff, :admin)