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??

¿Fue útil?

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
scroll top