我有一个FlavorPizza脚手架和一个SizePizza脚手架。我需要根据它的大小来设定比萨饼的价格(小比萨饼的价格与大比萨饼的价格不同)。所以,我创建了一个PricePizza模型,其迁移包括:flavor_pizza_id,:size_pizza_id和:price attributes。
我想在创建/编辑FlavorPizza对象时传递:price_pizza params,就像那样
FlavorPizza.create({
name: 'Muzzarela',
price_pizzas:[
{size_pizzas_id: 1, price:'9.99'},
{size_pizzas_id: 2, price:'12.99}
]
})
我尝试使用有很多通过,但我一直在收到错误。未定义的方法unscoped
这是我的代码:
price_pizza迁移:
create_table :price_pizzas do |t|
t.integer :size_pizzas_id
t.integer :flavor_pizzas_id
t.decimal :price, :precision => 5, :scale => 2
t.timestamps null: false
end
price_pizza.rb
class PricePizza < ActiveRecord::Base
has_many :flavor_pizzas
belongs_to :size_pizza
belongs_to :flavor_pizza
end
flavor_pizza.rb
class FlavorPizza < ActiveRecord::Base
has_many :price_pizzas
accepts_nested_attributes_for :price_pizzas
end
size_pizza.rb
class SizePizza < ActiveRecord::Base
has_many :price_pizzas
end
seeds.rb
SizePizza.create([{name: 'Small', diameter: '5.5', pieces: 3}])
FlavorPizza.create([{name: 'Muzzarela', description: 'test description', price_pizzas_attributes: [{size_pizzas_id: 1, price: '9.99'}]}])
#PricePizza.create(size_pizzas_id: 1, flavor_pizzas_id: 1, price: '10')
答案 0 :(得分:1)
这可能不会直接回答你的问题,但这通常是我处理种子的方式:
size = SizePizza.where(name: 'Small').first_or_create(diameter: '5.5', pieces: 3)
flavor = FlavorPizza.where(name: 'Muzzarela').first_or_create(...)
flavor.price_pizzas.create(price: '9.99') # you could also see if the price exists if desired
这样可以防止您复制种子数据,完成您要执行的操作,并在添加任何唯一约束时防止将来出现问题。
另外,例如,如果您想创建多个价格,您可以随时使用循环进行增强:
%w(9.99 12.99 18.99).each { |price| flavor.price_pizzas.create(price: price) }