1

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 %> 
+0

Pouvez-vous ajouter le code de fichier de votre vue? Et il devrait être ': illustrated_attributes' à la place. –

+0

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. –

+0

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. –

Répondre

0

Vous devez spécifier les nested_attributes de façon appropriée. accepts_nested_attributes_for prend le nom de l'association en tant que paramètre, puis vous devez ajouter le même assoc_attributes à votre attr_accessible. Donc changer votre modèle employé à

class Employee < ActiveRecord::Base 
    has_one :picture, :as => :illustrated 
    accepts_nested_attributes_for :picture 
    attr_accessible :name, :picture_attribute 
end 

Et changer la ligne field_for dans le code de vue de

<%= f.fields_for :picture do |form| %> 
Questions connexes