2016-02-25 34 views
4

我想向每個承租人模型添加多張圖片,但無法將其保存在我的承租人控制器上。 我已經使用寶石Carrierwave上傳它們。無法在Ruby on Rails中保存多張圖片Json

控制器/ renters_controller.rb

def create 
@renter = Renter.new(renter_params) 

if @renter.save 
    gflash notice: "Le loueur a bien été enregistré" 
    redirect_to '/' 
else 
    gflash :now, notice: "Une erreur est survenue." 
    render :new 
end 
end 

def renter_params 
    params.require(:renter).permit(:name, :address, :website, :email, :phone, :review, :latitude, :longitude, :user_id, pictures: []) 
end 

型號/ renter.rb

class Renter < ActiveRecord::Base 
    belongs_to :user 
    geocoded_by :address 
    after_validation :geocode 
    reverse_geocoded_by :latitude, :longitude 
    after_validation :reverse_geocode # auto-fetch address 
    mount_uploader :image, ImageUploader 
    mount_uploader :pictures; PicturesUploader 
end 

我有一個上傳文件 上傳/ pictures_uploader.rb

和我的看法形式 意見/renters/_form.html.haml

= form_for(@renter, :hmtl => {:multipart => true}) do |f| 
    - if @renter.errors.any? 
    #error_explanation 
     %h2 
     = pluralize(@renter.errors.count, "error") 
     prohibited this renter from being saved: 
     %ul 
     - @renter.errors.full_messages.each do |message| 
      %li= message 

    .row 
    .large-6.medium-6.columns 
     = f.text_field :name, placeholder: t('.name') 
    .large-6.medium-6.columns 
     = f.text_field :website, placeholder: t('.website') 
    .row 
    .large-6.medium-6.columns 
     = f.text_field :email, placeholder: t('.email') 
    .large-6.medium-6.columns 
     = f.text_field :phone, placeholder: t('.phone') 
    .row 
    .large-6.medium-6.columns 
     = f.text_field :address, placeholder: t('.address') 
    .large-3.medium-3.columns 
     = f.text_field :latitude, placeholder: :latitude 
    .large-3.medium-3.columns 
     = f.text_field :longitude, placeholder: :longitude 
    .row 
    = f.file_field :pictures, multiple: true, accept: "image/jpeg, image/jpg, image/gif, image/png" 


    .row 
    .large-12.columns.large-centered 
     .large-12.columns.large-centered 
     = f.submit :value => 'Valider', :class => 'default button' 

和我的錯誤消息

Processing by RentersController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"3YfZtWpnDb03yRs1HVp11jJSE15mm6PLOyIKxeJTcoOWsBaFNR/LYYYkD921Zzy5Urb9wgV5tpyhwG8oVAvZPw==", "renter"=>{"name"=>"Miami boat rental", "website"=>"", "email"=>"", "phone"=>"", "address"=>"", "latitude"=>"", "longitude"=>"", "pictures"=>[#<ActionDispatch::Http::UploadedFile:0x007f8ab9728530 @tempfile=#<Tempfile:/var/folders/1d/5fhghxdx5hz_7clwv4gkbwm80000gn/T/RackMultipart20160225-2432-sy0x2h.png>, @original_filename="corse_catamarans.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"renter[pictures][]\"; filename=\"corse_catamarans.png\"\r\nContent-Type: image/png\r\n">]}, "commit"=>"Valider"} 
Completed 500 Internal Server Error in 9ms (ActiveRecord: 0.0ms) 

TypeError (no implicit conversion of nil into String): 
app/controllers/renters_controller.rb:43:in `create' 

我認爲這個問題是由於圖片的JSON,但它只是我的感覺。提前致謝。

回答

0

我認爲你只是使用上傳者的照片,但你需要'圖像'參數,你不能離開這個參數nil

params.require(:renter).permit(:name, :address, :website, :email, :phone, :review, :latitude, :longitude, :user_id, :image, pictures: []) 

您應該從強參數方法中刪除此參數。像這樣:

params.require(:renter).permit(:name, :address, :website, :email, :phone, :review, :latitude, :longitude, :user_id, pictures: []) 
+0

感謝您的回答。我只是改變了它,但我仍然有同樣的錯誤。 –

+0

你可以用完整的表單發佈views/renters/_form.html.haml視圖嗎?和Renter模型中的回調方法? – T1djani

+0

我剛剛在問題內部進行了更改。謝謝。 –