1

多数の投稿に関連してさまざまな役割を持つ多数のユーザーがいます。これらの役割はowner、、、、editorです。各ユーザーは、投稿に対して1 つのロールのみを持つことができます。これを次のように、Rails で多数のスルー リレーションシップとして表現しました。viewernone

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この状況を処理するための好ましい方法は何ですか? Roleユーザー/投稿の組み合わせごとに 1 つのロールしかないことを強制し、作成ロジックでこれを強制するにはどうすればよいですか?

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_idれます。スコープを使用した検証post_idに関する Rails ガイドの詳細を確認できます。

于 2013-01-05T11:09:02.070 に答える