我使用一些属性值
初始化一个ItemMedida对象item_medida = SpfPedido::ItemMedida.new(cantidad: 3, ancho: 800, alto: 600)
但是当我调用它时,所有属性都是nil
item_medida #=> <SpfPedido::ItemMedida id: nil, cantidad: nil, ancho: nil, alto: nil)
cantidad,alto,ancho在DB中定义好。
为什么我会出现这种行为?我希望我的对象具有正确的属性。 有提示吗?
模型
# encoding: utf-8
module SpfPedido
class ItemMedida < ApplicationRecord
belongs_to :item, class_name: "SpfPedido::Item", inverse_of: :item_medidas
belongs_to :medida
has_many :pulidos, class_name: "SpfPedido::Pulido"
has_many :agujeros, class_name: "SpfPedido::Agujero"
has_many :entrantes, class_name: "SpfPedido::Entrante"
has_many :solapes, class_name: "SpfPedido::Solape"
has_one :forma
has_and_belongs_to_many :adjuntos
has_many :adjunto_medidas
has_many :adjuntos, through: :adjunto_medidas
has_many :curvaturas
has_many :bites
has_many :tango_bodies, as: :linea_item, class_name: 'SpfTango::TangoBody'
# Polymorphic
has_one :pre_facturacion, as: :linea_item
has_one :facturacion, as: :linea_item
has_one :expedicion, as: :linea_item
has_many :trazabilidads, through: :item
#############
has_and_belongs_to_many :orden_corte_mesas # creo que no va mas
has_many :medidas_orden_corte_mesas
has_many :comprobante_medidas
has_many :comprobante_temps, through: :comprobante_medidas
has_many :rotura_vidrios
has_many :elementos, through: :item
has_many :proceso_de_elementos, through: :item
has_many :componentes, through: :item
has_many :proceso_de_componentes, through: :item
delegate :pedido, to: :item
before_update :cambio_de_medidas?, :if => proc { ancho_changed? || alto_changed? }
validates :cantidad, numericality: { only_integer: true, greater_than: 0, less_than: 1000, message: "Debe introducirse un valor entero entre 0 y 999" }
validates :ancho, numericality: { only_integer: true, greater_than: 0, less_than: 10000, message: "Debe introducirse un valor entero entre 0 y 9999" }
validates :alto, numericality: { only_integer: true, greater_than: 0, less_than: 10000, message: "Debe introducirse un valor entero entre 0 y 9999" }
accepts_nested_attributes_for :medida
accepts_nested_attributes_for :solapes
accepts_nested_attributes_for :pulidos
accepts_nested_attributes_for :bites
accepts_nested_attributes_for :curvaturas
attr_accessor :config_pulido_id
attr_accessor :objeto_pulible_type
attr_accessor :objeto_pulible_id
attr_accessor :accion
attr_accessor :cambio_de_medidas
attr_accessor :comentario
attr_accessor :total_de_complementos # es la suma de complementos del item
attr_accessor :precio_unitario_con_complementos # total_linea + total_complementos / superficie
end
end
我希望item_medida为<SpfPedido::ItemMedida id: nil, cantidad: 3, ancho: 600, alto: 800>
编辑:
另一项测试。
item_medida = SpfPedido::ItemMedida.new(cantidad: 3, ancho: 800, alto: 600)
item_medida #=> <SpfPedido::ItemMedida id: nil, cantidad: nil, ancho: nil, alto: nil>
item_medida.valid? #=> false
item_medida = SpfPedido::ItemMedida.new(cantidad: 3, ancho: 800, alto: 600)
item_medida #=> <SpfPedido::ItemMedida id: nil, cantidad: 3, ancho: 800, alto: 600>
调用.valid?
方法后,item_medida对象被正确初始化。
答案 0 :(得分:0)
我发现了异常现象。这是我的错。我的模型包含一个模块,其中有一个错误的method_missing重定义,而不使用super,如下所示:
def method_missing(m, *args, &block)
if condition
#do something
end
end
所以我用
纠正了它def method_missing(m, *args, &block)
if condition
#do something
else
super(m, *args, &block)
end
end
感谢大家的帮助!