ruby-on-rails - 无法在 Ruby on Rails 中保存多张图片 Json

标签 ruby-on-rails ruby json carrierwave

我想为每个承租人模型添加多张图片,但我无法将它们保存在我的承租人 Controller 上。 我已经使用 gem Carrierwave 上传它们。

controllers/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

在我的 View 表单上 views/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的问题,不过这只是我的感觉。提前致谢。

最佳答案

我认为您仅将 uploader 用于图片,但您需要“图像”参数,您不能将此参数留给 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: [])

关于ruby-on-rails - 无法在 Ruby on Rails 中保存多张图片 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631178/

相关文章:

ruby - 如何使用 Ruby map 方法限制通过 API 发送的参数

java - 如何在 Java 中修改现有的 jsonobject

ruby-on-rails - 如何使用 ransack 查询链接范围

ruby-on-rails - 使用 minitest-rails 和 rails 4.1 的 Controller 测试路由错误

ruby-on-rails - Rails 3.1 应用部署教程

ruby-on-rails - Nokogiri gem 安装错误与狂欢

ruby - 在某些情况下,ruby 空格是否敏感?

ruby-on-rails - Handlebars.js & i18n-js,新助手

java - Retrofit 2 API 我可以使用本地文件路径或 json 字符串而不是 url 吗?

ios - 解析 JSON 帮助 IOS