Rails belongs_to et héritage de table unique ne comportant
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 ??
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