そのため、パーミッションを中央のテーブルとして使用して、ユーザーと試験の間に多対多の関係があります。
管理者がさまざまなテストへのさまざまなレベルのアクセスを許可するためのテーブルを作成したいと思います。
それで、このユーザーにまだ関連付けられていないすべての試験をループして新しい許可を作成するよりも、新しい許可レコードを作成するためのより良い方法はありますか?
一部またはすべての試験は、すでにユーザーに関連付けられている場合があることに注意してください。
そのため、パーミッションを中央のテーブルとして使用して、ユーザーと試験の間に多対多の関係があります。
管理者がさまざまなテストへのさまざまなレベルのアクセスを許可するためのテーブルを作成したいと思います。
それで、このユーザーにまだ関連付けられていないすべての試験をループして新しい許可を作成するよりも、新しい許可レコードを作成するためのより良い方法はありますか?
一部またはすべての試験は、すでにユーザーに関連付けられている場合があることに注意してください。
次のようなものがあるとします。
class User < ActiveRecord::Base
has_many :permissions
has_many :exams, through: :permissions
end
class Exam < ActiveRecord::Base
has_many :permissions
has_many :users, through: :permissions
end
class Permission < ActiveRecord::Base
belongs_to :user
belongs_to :exam
end
次のようなことができます:
user = User.find(1)
if user.exams.where(id:foo).length==0
Permission.create(user_id:1, exam_id0:foo, access_level:bar)
else
user.permissions.where(exam_id:foo).first.update_attribute(:access_level,bar)
end
user_id
テーブルを結合し、通常どおりに関係を構築したと仮定して (パーミッションのインデックスとインデックスを使用して)、パーミッションが既に存在するかどうかを非常に迅速に判断しますexam_id
。