1

我有许多用户在许多帖子中具有不同的角色。这些角色是owner, editor, viewer, none。每个用户可能只有一个帖子角色。我将其表示为在 Rails 中有许多直通关系,如下所示:

class User < ActiveRecord::Base
  has_many :roles
  has_many :posts, :through => :roles
end

class Post < ActiveRecord::Base
  has_many :roles
  has_many :users, through => :roles
end

class Role < ActiveRecord::Base
  attr_accessor :role
  belongs_to :users
  belongs_to :posts
end

其中角色属性用于指示用户在帖子中拥有的角色类型。设置新角色时,我不能简单地使用<<运算符,因为它不会设置role属性。处理这种情况的首选方法是什么?如何强制每个用户/帖子组合只有一个角色并在我的Role创建逻辑中强制执行?

4

2 回答 2

1

您可以检查 User 的角色创建,如果他已经分配了角色,在这种情况下您可以跳过分配此角色。

unless user.roles.present?
  user.roles.create
end
于 2013-01-05T10:42:45.660 回答
0

我了解您希望确保没有用户对某个帖子拥有多个角色。如果这是您想要实现的,那么您只需向您的Role模式添加唯一性验证

validates :user_id, uniqueness: {scope: :post_id, message: 'User can have one role per post'}

这将确保 和 的组合user_idpost_id唯一的,您可以在 rails guide on validation with scope看到更多信息。

于 2013-01-05T11:09:02.070 回答