我的Rails模型有一些不好的线条。通常,第一个错误是从roles
def访问has_access
变量时。然后,第二个是where
行动。
class Organization < ActiveRecord::Base
has_and_belongs_to_many :organizations_users
belongs_to :user
validates :name, :presence => true, :length => { minimum: 4, maximum: 35 }, uniqueness: true
roles = { :administrator => 1, :support => 2 }
def has_access(chosen_user, role)
self.organizations_users.where('user_id = ? and role = ?', chosen_user.id, roles[role]).exists?
end
def add_user(chosen_user, role)
if !self.has_access(chosen_user, role)
self.organizations_users.create({user_id: chosen_user.id, role: roles[role]})
end
has_access(chosen_user,role)
end
end
我还需要查询organizations_users
表以获取有关访问的信息。我该如何解决这个问题?
答案 0 :(得分:0)
要查找或添加组织,请执行以下操作:
def has_access(role)
self.organizations_user.find_or_create_by_role(role)
end
这允许您使用:
user = User.has_access("administrator")
user = User.first.has_acess("administrator")
并且会在表user_organizations中进行查找,或者如果找不到,则创建一个新条目。 ActiveRecord关系将处理user_id
答案 1 :(得分:0)
最简单的解决方法是改变
def has_access(chosen_user, role)
where('user_id = ? and role = ?', chosen_user.id, roles[role]).exists?
end
为:
def has_access(chosen_user, role)
Organization.where('user_id = ? and role = ?', chosen_user.id, roles[role]).exists?
end
这样做的原因是where()方法是一个类方法,只能从类本身IE中访问。 Organization.where
。顺便说一下,我假设(危险:) :)这个where子句是从组织中使用的。