내 레일 앱에 사용자 모델과 역할 모델이 있습니다. 각 사용자는 하나의 역할에 속하며 각 역할에는 많은 사용자가 있습니다. 해당 사용자의 역할을 확인하기 위해 사용자 모델에 정의 된 세 가지 방법이 def admin?
, def user?
및 def expert?
입니다.데이터베이스의 쿼리가 레일로 돌아 오지 않습니다.
사용자 클래스 :
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
을 만들려고하고 있습니다. 그러나이 방법으로 expert?
을 인식하지 못하는
<%= collection_select(:keyword, :user_ids, User.where('expert?'), :id, :name, {prompt: true}, {:multiple => true}) %>
:처럼 뭔가. 아무도 내가이 쿼리를 어떻게 수행 할 수 있는지 궁금합니다. 레일스에 익숙하지 않은만큼 순진한 질문이라면 유감입니다.
감사합니다, 아미르 아무것도
User.where (역할 : {name : "expert"})를 시도하면 어떻게됩니까? –
'rails c'를 실행하고'User.last.expert? '를 시도하면 어떻게됩니까? –
'User.last.expert?'는 false를 반환하고'User.last.admin? '은 true를 나타내는 true를 반환합니다. @KarimTarek – akargar