Estoy trabajando en el libro Agile Web Development 6th ed. En la Tarea G, estoy confundido sobre cómo se puede llamar a line_items desde el método add_line_items_from_cart. El código es el siguiente:

class Order < ApplicationRecord
  has_many :line_items, dependent: :destroy

  def add_line_items_from_cart(cart)
    cart.line_items.each do |item|
      item.cart_id = nil
      line_items << item
    end
  end

class LineItem < ApplicationRecord
  belongs_to :order, optional: true
  ...
end

Encendí una consola de rieles y cuando corro

c = Cart.last
c.line_items.each do |item|
  item.id
  line_items
end

Yo obtengo NameError (undefined local variable or method 'line_items' for main:Object)

¿Por qué line_items puede trabajar en el método anterior, sin anteponer c.line_items? ¿Y por qué no funciona cuando lo ejecuto en la consola de rieles?

0
MLZ 22 ene. 2021 a las 07:03

1 respuesta

La mejor respuesta

line_items en el método se ejecutará como

self.line_items << item

Aquí self se referirá a la instancia de la clase Order

Pero en caso de llamarlo desde la consola de rieles, intentará encontrar una variable local line_items por eso está obteniendo un error

2
theabhisheksoni 22 ene. 2021 a las 10:48