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 来检查用户是否是自由职业者。