Je reçois une erreur d'affectation de masse lors de la soumission d'un formulaire imbriqué pour un modèle polymorphique has_one. Le formulaire tente de créer des instances Employee et Picture basées sur le polymorphic association Rails guide.Erreur d'affectation de masse avec association polymorphique
J'apprécierais littéralement ANY exemple de fonctionnement d'une forme de création imbriquée pour un modèle polymorphique has_one! Je sais qu'il y a énormément de questions sur les erreurs d'assignation de masse, mais je n'ai jamais vu d'exemple avec des associations polymorphes.
Modèles
class Picture < ActiveRecord::Base
belongs_to :illustrated, :polymorphic => true
attr_accessible :filename, :illustrated
end
class Employee < ActiveRecord::Base
has_one :picture, :as => :illustrated
accepts_nested_attributes_for :picture
attr_accessible :name, :illustrated_attribute
end
migrations
create_table :pictures do |t|
t.string :filename
t.references :illustrated, polymorphic: true
end
create_table :employees do |t|
t.string :name
end
contrôleurs/employees_controller.rb
...
def new
@employee = Employee.new
@employee.picture = Picture.new
end
def create
@employee = Employee.new(params[:employee])
@employee.save
end
...
Erreur
Dans les modèles, j'ai essayé toutes les permutations de: illustré,: image,: illustrated_attribute,: illustrated_attributes,: picture_attribute,: picture_attributes, etc. Des conseils ou des exemples?
EDIT:
_form.html.erb
<%= form_for(@employee) do |f| %>
<%= f.fields_for :illustrated do |form| %>
<%= form.text_field :filename %>
<% end %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
Pouvez-vous ajouter le code de fichier de votre vue? Et il devrait être ': illustrated_attributes' à la place. –
Une autre chose remplace cette ligne '@employee.picture = Picture.new' avec '@ employee.build_picture' dans la nouvelle action employee. C'est la bonne façon de créer un enregistrement associé avec l'association has_one/belongs_to. –
Merci - ajouté le code de vue. J'ai essayé ': illustrated_attributes' dans le modèle mais j'ai eu la même erreur. Aussi changé en '@ employee.build_picture' mais toujours avec la même erreur. –