1

Ich versuche, mehrere Bilder mit acces_nested_attributes_for und polymorpher Assoziation zu übergeben. Aber bekommen diesen Fehler no implicit conversion of Symbol into Integer. Obwohl ich weiß, ich habe alle Setup immer noch ich weiß nicht, was ich vermisse.Und ich habe carrierwave für das Hochladen von Bildern.Mehrere Bilder mit verschachtelten Attributen und polymorpher Assoziation übergeben

User.rb

class User < ApplicationRecord 
    has_many :images,-> { where(object_type: 'User') },as: :object,:foreign_key => 'object_id' ,dependent: :destroy 
    accepts_nested_attributes_for :images 

    validates :first_name,presence: true 
end 

Image.rb

class Image < ApplicationRecord 
    before_destroy :remember_id 
    after_destroy :remove_id_directory 

    mount_uploader :image, ImageUploader 
    belongs_to :object,polymorphic: true 

    validates :name,presence: true 

    protected 

    def remember_id 
    @id = id 
    end 

    def remove_id_directory 
    FileUtils.remove_dir("#{Rails.root}/public/uploads/image/image/#{@id}", :force => true) 
    end 
end 

users_controller.rb

class UsersController < ApplicationController 
    def index 
    @users = User.all 
    end 

    def new 
    @user = User.new 
    @user.images.build 
    end 

    def create 
    @user = User.new 
    @user.images.build(user_params) 
    if @user.save 
     redirect_to users_path 
    else 
     render :new 
    end 
    end 

    def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 
    redirect_to users_path 
    end 

    private 

    def user_params 
    params.require(:user).permit(:first_name,images_attributes: [:name,:image,:user_id ]) 
    end 
end 

Benutzer/new.html.erb

<%= form_for @user,html: {multipart: :true} do |f| %> 
    <%= f.text_field :first_name %> 

    <%= f.fields_for :images_attributes do |images_fields| %> 
    Nama : <%= images_fields.text_field :name %> 
    Image: <%= images_fields.file_field :image,:multiple => true %> 

    <% end %> 
    <%=f.submit "Submit" %> 
<% end %> 

Log

Started POST "/users" for 127.0.0.1 at 2017-01-27 11:20:29 +0530 
Processing by UsersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"wpb1cqph+SAucEfeb0isx7DKtsV4PQeyq47xZbz/Ac7cSfoSleBXynNJiT+kNni5OaX/DqNhR+h1Xvli2QyBbg==", "user"=>{"first_name"=>"adasd", "images_attributes"=>{"0"=>{"name"=>"asdasd", "image"=>[#<ActionDispatch::Http::UploadedFile:0x00000003819838 @tempfile=#<Tempfile:/tmp/RackMultipart20170127-3305-16cl68l.png>, @original_filename="1.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[images_attributes][0][image][]\"; filename=\"1.png\"\r\nContent-Type: image/png\r\n">, #<ActionDispatch::Http::UploadedFile:0x000000038197e8 @tempfile=#<Tempfile:/tmp/RackMultipart20170127-3305-8o6vn7.png>, @original_filename="27_dec.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[images_attributes][0][image][]\"; filename=\"27_dec.png\"\r\nContent-Type: image/png\r\n">, #<ActionDispatch::Http::UploadedFile:0x000000038196a8 @tempfile=#<Tempfile:/tmp/RackMultipart20170127-3305-1j7hl1r.png>, @original_filename="Screenshot from 2017-01-13 16:52:49.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[images_attributes][0][image][]\"; filename=\"Screenshot from 2017-01-13 16:52:49.png\"\r\nContent-Type: image/png\r\n">]}}}, "commit"=>"Submit"} 
Unpermitted parameter: image 
Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.0ms) 
+0

Hallo. Es hilft uns, Ihnen zu helfen, wenn Sie Ihre Logs einsehen (entweder im Konsolenfenster oder in 'log/development.log') und den StackTrace gefunden haben, der dieser Fehlermeldung entspricht und ihn in Ihre Frage kopiert/eingefügt hat würde uns helfen, herauszufinden, welche Zeile (nicht nur in Ihrem Code, sondern auch in carrierwave) diesen Fehler verursacht –

+0

Aber nur ein schneller Squiz sagt mir auch, dass dies wahrscheinlich nicht ganz richtig ist: 'f.fields_for: images_attributes' sollte es wahrscheinlich: 'f.fields_for: images' (in der Form. in der Erlaubnis/erfordern Sie sonst' 'images_attributes') –

+0

Okay, ich zeige Ihnen meine development.log –

Antwort

1

ich die Lösung

users_controller.rb

def create 
    @user = User.new(user_params) 
    if @user.save 
     params[:images_attributes]['image'].each do |a| 

      @image_attachment = @user.images.create!(:image => a,:name=> params[:images_attributes][:name].join) 

     end 

     redirect_to users_path 

    else 
     render :new 
    end 
    end 

gefunden haben Benutzer/new.html.erb

<%= form_for @user,html: {multipart: :true} do |f| %> 

    <%= f.text_field :first_name %> 

    <%= f.fields_for :images do |images_fields| %> 
    Name : <%= images_fields.text_field :name,name: "images_attributes[name][]" %> 
    Image: <%= images_fields.file_field :image,:multiple => true,name: "images_attributes[image][]" %> 

    <% end %> 
     <%=f.submit "Submit" %> 

<% end %> 
Verwandte Themen