Question

J'ai un modèle Bike et un modèle Component. Plusieurs modèles héritent de Component:. Frame, Chain, Crankset etc

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 pirater ma forme pour générer les params suivants, il fonctionne:

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

Voici 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

Vais-je fou? Ne sont pas les params imbriquées 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 ??

Était-ce utile?

La solution

Vous utilisez des formulaires imbriqués, de sorte params imbriqués doivent fonctionner si vous utilisez la balise accepts_nested_attributes_for (voir Railscast 196/197).

belongs_to :frame
accepts_nested_attributes_for :frame
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top