播种has_many时出现Rails 4错误

时间:2015-08-06 19:41:04

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个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')

1 个答案:

答案 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) }