2

J'ai une erreur "Impossible d'attribuer en masse des attributs protégés: Upload", mais je l'ai assigné pour être accessible.Les rails acceptent les attributs imbriqués pour une association polymorphe

Ceci est une forme imbriquée avec une association polymorphe.

modèles

class Upload < ActiveRecord::Base 
    attr_accessible :link, :post_id 
    belongs_to :uploadable, polymorphic: true 
end 

class Post < ActiveRecord::Base 
    attr_accessible :description, :title, :uploads_attributes 
    has_many :uploads, as: :uploadable 
    accepts_nested_attributes_for :uploads, :reject_if => lambda { |a| a[:content].blank? 
    }, :allow_destroy => true 
end 

j'ai essayé trop mis accept_nested ... pour: uploadable mais me dit l'association existe les dont

L'action nouvelle sur le contrôleur est celui

def new 
    @post = Post.new 
    @post.uploads.new 
end 

et voici le formulaire pour créer

<%= form_for [:admin,@post], remote: true, :html => {:multipart => true} do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title%> 
    </div> 
    <div class="field"> 
    <%= f.label :description%><br /> 
    <%= f.text_area :description %> 
    </div> 
    <div> 
    <%= f.fields_for :upload do |builder| %> 
     <%= render 'upload_fields', f: builder %> 
    <% end %> 
    <%= link_to_add_fields "Add Upload", f, :uploads %> 
    </div> 
    <div class="actions"> 
    <%= f.submit%> 
    </div> 
<% end %> 

La partie ...

<fieldset> 
    <%= f.label :file %><br /> 
    <%= f.file_field :file %> 
    <%= f.hidden_field :_destroy %> 
    <%= link_to "remove", '#', class: "remove_fields" %> 
</fieldset> 

ne pense pas que le javascript affecte, donc je ne vais pas le mettre ici. Comment cna résout "Impossible d'assigner en masse des attributs protégés" à des associations polymorphes?

Plz besoin d'aide sur cette personne. Cant belive Je ne peux pas télécharger des fichiers, semble si simple sur des tutoriels, et sa ne fonctionne pas, ou je reçois un ne peut pas masse assign oula télétransmettre pas enregistré ....

Répondre

-1

cette ligne dans votre vue:

<%= f.fields_for :upload do |builder| %> 

devrait être ceci:

<%= f.fields_for :uploadable do |builder| %> 

Parce que l'association sur le modèle Post est appelé "uploadable", pas "upload".

Pour les attributs imbriqués pour travailler, vous devrez spécifier le modèle n'accepte les attributs imbriqués pour ce modèle, qui peut être fait en mettant cette ligne sous le belongs_to dans votre modèle:

accepts_nested_attributes_for :uploadable 

Et vous devront rendre ces attributs accessibles, que vous pouvez faire avec ceci:

attr_accessible :uploadable_attributes 
+0

Si je mets accepts_nested_attributes_for: uploadable dans le modèle Post, me dit -> Aucune association trouvée pour nom 'uploadable ». A-t-il déjà été défini? – Nonyck

+0

plus d'infos sur l'erreur => ActiveModel :: MassAssignmentSecurity :: Erreur dans Admin :: PostsController # créer – Nonyck

+0

note aussi si je l'utilise sur le contrôleur de téléchargement - @post = @ post.uploads.new j'ai obtenu cette erreur méthode non définie 'admin_uploads_path ' – Nonyck

0

Essayez d'utiliser @post.uploads.build au lieu de @post.uploads.new

0

Le modèle associé doit connaître l'identité de son parent pour enregistrer la relation. je vous recommande la Railscast suivante: Polymorphic Association.

#uploads_controller.rb 
before_filter :load_uploadable 

def create 
    @upload = @uploadable.uploads.new(params[:upload]) 
.... 
end 

private 

def load_uploadable 
    resource, id = request.path.split('/')[1, 2] # /posts/1 
    @uploadable = resource.singularize.classify.constantize.find(id) 
end 
Questions connexes