Rails pertencem_to e herança de mesa única não se comportando
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??
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