Rails pertenentes_ y la herencia de una sola tabla no se comporta
Pregunta
tengo un Bike
modelo y un Component
modelo. Varios modelos heredan de Component
: Frame
, Chain
, Crankset
etc.
Cuando envío mi formulario, mis parámetros se ven así:
"bike" => { "frame" => { "id" => "4" }, "chain" => { "id" => "19" }, ... }
En mi controlador, se rompe el siguiente código:
@bike = Bike.new(params[:bike])
> Frame(#90986230) expected, got HashWithIndifferentAccess(#81888970)
Si pirateo mi formulario para generar los siguientes parámetros, funciona:
"bike" => { "frame_id" => "4", "chain_id" => "19" ... }
Aquí están mis modelos:
class Bike < ActiveRecord::Base
belongs_to :frame
belongs_to :chain
...
end
class Component < ActiveRecord::Base
has_many :bikes
end
class Frame < Component
end
La herencia de una sola tabla está funcionando, puedo llamar Frame.first
y Component.all
sin problemas.
¿Me estoy volviendo loco? ¿No son los parámetros anidados la convención habitual? Eso es lo que es generado por:
- f.fields_for @bike.frame do |frame|
= frame.hidden_field :id
¿¿Qué estoy haciendo mal??
Solución
Está utilizando formularios anidados, por lo que los parámetros anidados deberían funcionar si usa el accepts_nested_attributes_for
Etiqueta (ver Railscast 196/197).
belongs_to :frame
accepts_nested_attributes_for :frame
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow