我目前有一个客户模型,其中有很多价格。
Pricings表:
create_table "pricings", force: true do |t|
t.integer "product_id"
t.integer "client_id"
t.decimal "unit_price"
t.datetime "created_at"
t.datetime "updated_at"
end
Pricings模型:
class Pricing < ActiveRecord::Base
belongs_to :client
belongs_to :product
validates :unit_price, presence: true
end
客户端模型:
class Client < ActiveRecord::Base
has_many :deliveries
has_many :collections
has_many :pricings
accepts_nested_attributes_for :pricings, allow_destroy: true
scope :order_by_name, -> { order('lower(name)') }
validates :name, :address, :vat_number, presence: true
validates :pricings, presence: { :message => ": Products must be added for a client before you can save." }
end
正如您在上面所看到的,当我创建,保存,更新客户端时,应该存在价格。我现在想要的是确保pricings具有唯一的product_id(没有两个pricings可以具有相同的product_id。)
我正在使用茧宝石(&#39; cocoon&#39;,&#39;〜&gt; 1.2.3&#39; - https://github.com/nathanvda/cocoon)并发现这篇文章有所帮助我,但我真的很难理解我应该在哪里添加代码?
链接到我不理解的代码:http://techbrownbags.wordpress.com/2014/02/05/rails-validation-of-cocoon-nested-forms/
如何根据我的情况调整该代码?
答案 0 :(得分:1)
您需要在定价模型中添加验证:
class Pricing < AR::Base
validates :product_id, uniqueness: true
end
请注意,即使这样,仍有可能在数据库中输入两个重复项(特别是当您使用多线程服务器(如unicorn)或您的应用程序在multimple服务器上运行时)。要100%确定,您必须引入数据库约束。您可以通过简单的迁移来完成此任务:
add_index :pricings, :product_id, :unique => true