Rails 单个用户角色的关系
Rails relationship for a single user role
我目前正在使用 RoR 构建一个像自由职业者这样的网站,但我被困在某个地方,我的用户 table 是用设计生成的,它有一个角色列,可以是管理员、客户或自由职业者.我也有属于用户的技能 table 但我不希望每个用户都拥有技能,除了具有自由职业者角色的用户,我该怎么做,我目前正在为用户使用 cancancan授权和身份验证设计,角色是这个或 STI 的最佳解决方案,你会如何建议我解决这个问题,这是一个示例代码
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :user_roles
has_many :skills
has_many :skills, through: :user_skills ## I don't want all users to have skills except the users with the role of freelancer
has_many :roles, through: :user_roles
def role?(role)
roles.any? { |r| r.name.underscore.to_sym == role }
end
end
谢谢你的期待。
你可以这样做:
class Skill < ApplicationRecord
belongs_to :user, -> { where role: 'freelancer' }
end
请记住,这将为任何 role
保存 skills
,但它们仅对 freelancer
可见。
您还可以使用 cancancan 来检查用户是否是自由职业者。
我目前正在使用 RoR 构建一个像自由职业者这样的网站,但我被困在某个地方,我的用户 table 是用设计生成的,它有一个角色列,可以是管理员、客户或自由职业者.我也有属于用户的技能 table 但我不希望每个用户都拥有技能,除了具有自由职业者角色的用户,我该怎么做,我目前正在为用户使用 cancancan授权和身份验证设计,角色是这个或 STI 的最佳解决方案,你会如何建议我解决这个问题,这是一个示例代码
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :user_roles
has_many :skills
has_many :skills, through: :user_skills ## I don't want all users to have skills except the users with the role of freelancer
has_many :roles, through: :user_roles
def role?(role)
roles.any? { |r| r.name.underscore.to_sym == role }
end
end
谢谢你的期待。
你可以这样做:
class Skill < ApplicationRecord
belongs_to :user, -> { where role: 'freelancer' }
end
请记住,这将为任何 role
保存 skills
,但它们仅对 freelancer
可见。
您还可以使用 cancancan 来检查用户是否是自由职业者。