Pergunta

eu tenho um Bike modelo e a Component modelo. Vários modelos herdam de Component: Frame, Chain, Crankset etc.

Quando envio meu formulário, meus parâmetros se parecem com o seguinte:

"bike" => { "frame" => { "id" => "4" }, "chain" => { "id" => "19" }, ... }

No meu controlador, o código seguinte quebra:

@bike = Bike.new(params[:bike])
> Frame(#90986230) expected, got HashWithIndifferentAccess(#81888970)

Se eu invadir meu formulário para gerar os seguintes parâmetros, ele funciona:

"bike" => { "frame_id" => "4", "chain_id" => "19" ... }

Aqui estão meus modelos:

class Bike < ActiveRecord::Base
  belongs_to :frame
  belongs_to :chain
  ...
end

class Component < ActiveRecord::Base
  has_many :bikes
end

class Frame < Component
end

A herança de tabela única está funcionando - posso ligar Frame.first e Component.all sem problemas.

Estou ficando louco? Os parâmetros aninhados não são a convenção usual? É isso que é gerado por:

- f.fields_for @bike.frame do |frame|
  = frame.hidden_field :id

O que estou fazendo errado??

Foi útil?

Solução

Você está usando formulários aninhados, para que parâmetros aninhados devem funcionar se você usar o accepts_nested_attributes_for tag (veja Railscast 196/197).

belongs_to :frame
accepts_nested_attributes_for :frame
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top