我正在阅读使用Rails 4Th editon的敏捷网络开发一书,当他在一个模型中展示这个方法时:
def add_line_items_from_cart(cart)
cart.line_items.each do |item|
item.cart_id = nil
line_items << item
end
end
这就是解释:
*对于我们从购物车转移到订单的每件商品,我们需要做两件事。首先我们将cart_id设置为nil,以防止物品在销毁购物车时变脏。然后我们将项目本身添加到订单的line_items集合中。请注意,我们不必对各种外键字段执行任何特殊操作,例如在行项目行中设置order_id列以引用新创建的订单行。 Rails使用我们添加到Order和LineItem模型的has_many和belongs_to声明为我们编织。将每个新订单项附加到line_items集合,将密钥管理责任交给Rails。*
有人可以解释这个简单的代码行line_items&lt;&lt;项目做了所有的事情?
感谢您的关注 西蒙
答案 0 :(得分:3)
有人可以解释一下这段简单的代码
line_items << item
如何完成所有这些工作吗?
那条线不能完成所有这些。
这样可以更好地阅读:
def add_line_items_from_cart(cart) #<-- For each item that we transfer from the cart to the order we need to do two things
cart.line_items.each do |item|
item.cart_id = nil #<-- First we set the cart_id to nil in order to prevent the item from going poof when we destroy the cart.
line_items << item #<-- Then we add the item itself to the line_items collection for the order
end
end
剩下的:
请注意,我们没有必要对......等做任何特别的事情
是关于框架的功能的信息。因此,描述对应于整段代码而不仅仅是该行。
答案 1 :(得分:2)
cart.line_items.each do |item|
- &gt;从该购物车中获取每个line_items并“为它们命名”项目,以便您可以对它们进行更改
item.cart_id = nil
- &gt;将项目的card_id设置为nil
line_items << item
- &gt;将项目本身添加到订单的line_items集合
答案 2 :(得分:0)
line_items
是一个列表,line_items << item
将一个项目添加到该列表中。 item.cart_id = nil
使用该项清除购物车ID,以防它与其他购物车相关联。
答案 3 :(得分:0)
这本书已经说过Rails所需的全部东西是Rails的工作,line_items,belongs_to和has_many。在Rails内部,它可以帮助我们更新line_item.order_id。