1

J'ai un modèle Bike et un modèle Component. Plusieurs modèles héritent de Component: Frame, Chain, Crankset etc.Rails belongs_to et l'héritage de table unique ne se comporte pas

Quand je soumets ma forme, mes params ressemblent à ceci:

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

Dans mon contrôleur, les pauses code suivant:

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

Si je pirate mon formulaire pour générer les paramètres suivants, cela fonctionne:

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

Voilà mes modèles:

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

class Component < ActiveRecord::Base 
    has_many :bikes 
end 

class Frame < Component 
end 

héritage de table unique fonctionne - je peux appeler Frame.first et Component.all sans problème.

Est-ce que je deviens fou? Les params imbriqués ne sont-ils pas la convention habituelle? C'est ce qui est généré par:

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

Qu'est-ce que je fais mal ??

+2

Avez-vous 'accept_nested_attributes_for' dans votre modèle' Bike'? –

Répondre

2

Vous utilisez des formulaires imbriqués. Les paramètres imbriqués doivent donc fonctionner si vous utilisez la balise accepts_nested_attributes_for (voir railscast 196/197).

belongs_to :frame 
accepts_nested_attributes_for :frame 
+0

Facepalm ... merci – nfm