【发布时间】:2017-05-13 22:04:37
【问题描述】:
我有 3 个模型,Cart、CartItem、Product。在每个他们中,我定义了这样的关联:
cart.rb
has_many :cart_items
has_many :products, through: :cart_items, source: :product
def add_product_to_cart(product)
ci = cart_items.new
ci.product = product
ci.quantity = 1
ci.save
end
cart_item.rb
belongs_to :cart
belongs_to :product
这里是cart_item的相关列,db/schema.rb
create_table "cart_items", force: :cascade do |t|
t.integer "cart_id"
t.integer "product_id"
t.integer "number", default: 1
.
.
.
end
然后我在控制台中这样做了:
>> p = Product.first
>> c = Cart.create
>> c.add_product_to_cart(p)
>> CartItem.last
我的问题是:
cart.rb 中第一行 add_product_to_cart(product)
当我使用 ci = cart_items.new 时,它可以正常工作,新的 cart_item 有一个 :cart_id = 2
但是当我使用 ci = CartItem.new 时,新的 cart_item 的 :cart_id => nil ,这次 cart_item 没有得到 cart_id。
为什么会这样?在 controller.rb 中,new 方法似乎遵循大写的 Class_name。
有什么区别?什么时候应该使用cart_items.new,什么时候应该使用CartItem.new
【问题讨论】:
标签: ruby-on-rails