My railsアプリケーションにはUserモデルとRoleモデルがあります。各ユーザーは1つの役割に属し、各役割には多数のユーザーが存在します。ユーザーモデルには、そのユーザーの役割を確認するための3つのメソッドが定義されています。def admin?
、def user?
、およびdef expert?
。データベースからのクエリがレールに返されない
Userクラス:
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
validates_presence_of :name
validates_presence_of :avatar
validates_integrity_of :avatar
validates_processing_of :avatar
before_save :assign_role
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :role
has_many :items
belongs_to :organization
has_many :expertkeywordmodels
has_many :keywords, through: :expertkeywordmodels
def assign_role
self.role = Role.find_by name: "Admin" if self.role.nil?
end
def self.with_role(role)
my_role = Role.find_by_name(role)
where(:role => my_role)
end
def admin?
self.role.name == "Admin"
end
def user?
self.role.name == "User"
end
def expert?
self.role.name == "Expert"
end
end
役割クラス:
class Role < ActiveRecord::Base
has_many :users
end
は私だけexpert
役割を持っているユーザーとcollection_select
を作成しようとしています。以下のような何か:
<%= collection_select(:keyword, :user_ids, User.where('expert?'), :id, :name, {prompt: true}, {:multiple => true}) %>
しかし、それは方法としてexpert?
認識しません。誰かがこのクエリを実行する方法を知っているかどうか疑問に思っていました。 これは私がレールに慣れていないので、素朴な質問であればごめんなさい。
何もしてくれてありがとう、 アミール
User.where(役割:{名前: "expert"}) –
'rails c'を起動し、この' User.last.expert? 'を試してみたらどうなりますか? –
'User.last.expert?'はfalseを返し、 'User.last.admin? 'はそれが正しいことを意味するtrueを返します。 @KarimTarek – akargar