不完全确定如何谷歌这个确切的问题,但要点是我有几个模型 - 用户属于一个帐户,评估属于一个帐户,用户和评估在其表中都有 account_id 。在同一帐户中初始化另一个模型的任何模型都应具有相同的帐户 ID。这是为了确保应用程序中多租户基于行的数据隔离。
这就是我的模型的大致样子。事实上,还有许多其他模型
belongs_to
帐户,我想确保所有数据都与正确的帐户相关联。
class User < ApplicationRecord
has_many :assessments
default_scope { where(account_id: Account.current_id)}
end
class Assessment < ApplicationRecord
belongs_to :user
end
class Account < ApplicationRecord
has_many :users, dependent: :destroy
has_many :assessments
cattr_accessor :current_id
validates_uniqueness_of :name, presence: true
end
为什么这段代码不起作用?
user = User.first
a = user.assessment.create
a.account_id == user.account_id # a.account_id is nil so this is False
acc = Account.first
user = acc.users.first
a = user.assessment.create
a.account_id == user.account_id # a.account_id is nil so this is False
我认为 Rails 应该为我管理这个问题是错误的吗?是否有一种替代方法可以帮助确保如果一个模型创建另一个模型并且两个模型都有
account_id
字段,则将使用相同的值创建新实例?
我能看到的唯一替代方案是在每次创建对象时手动设置帐户 ID。
create
方法无法了解有关user
对象的任何信息。您必须将 account: user.account
传递到方法中才能创建“反向关联”。