我有两个模型Company
,Asset
和一个联接模型CompanyAsset
,关联如下:
class Company < ActiveRecord::Base
has_many :company_assets
has_many :assets, through: :company_assets
accepts_nested_attributes_for :company_assets, allow_destroy: true
end
class Asset < ActiveRecord::Base
has_many :company_assets
has_many :companies, through: :company_assets
validates :label, uniqueness: true
end
class CompanyAsset < ActiveRecord::Base
belongs_to :company
belongs_to :asset
accepts_nested_attributes_for :asset, allow_destroy: true
end
我想验证label
的{{1}}属性的唯一性,以便唯一性特定于Asset
。
例如: Company-A 和 Company-B 。
公司-A 只有一个Company
Asset
Asset-A 。现在系统应该允许我为 Company-B 创建 Asset-A ,但是不应该允许为公司再次创建 Asset-A -A
label
将不允许在任何validates :label, uniqueness: true
Asset
我正在创建Company
条记录
Asset
现在我要为 Company-B
创建 Asset-Aa = Company.find(1) // Company-A
a.update(company_assets_attributes: [{info: 'pqr', asset_attributes: {label: 'Asset A'}}])
关于如何处理唯一性的任何想法?
答案 0 :(得分:0)
您可以在标签上添加ActiveRecord自定义验证程序,查找相同的标签,company_id对。
在CompanyAsset上:
validate :asset_label_must_be_unique
def asset_label_must_be_unique
errors.add(:base, 'Must unique') unless CompanyAsset.joins(:assets).where('assets.label' => asset.label).where(company_id: company_id).none?
end
答案 1 :(得分:0)
您可以这样做:
验证:标签,唯一性:{scope :: company_id}