Ruby on rails 从强参数数组创建多个对象

Ruby on rails 从强参数数组创建多个对象,ruby-on-rails,Ruby On Rails,我有一个表单,用户可以上传多个图像。我需要控制器为上传的每个图像创建一个user\u item\u image user\u item有许多user\u item\u图像 schema.rb create_table "user_item_images", force: :cascade do |t| t.integer "user_item_id" t.datetime "created_at" t.datetime "updated_at" t.stri

我有一个表单,用户可以上传多个图像。我需要控制器为上传的每个图像创建一个
user\u item\u image

user\u item
有许多
user\u item\u图像

schema.rb

  create_table "user_item_images", force: :cascade do |t|
    t.integer  "user_item_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "picture"
  end
表格

<%= form_for :user_item_image, url: user_item_user_item_images_path(@user_item) do |f| %>
    <%= f.file_field :picture, multiple: true %>
    <%= f.submit %>
我不知道如何使控制器的创建操作。我所拥有的不起作用。
user\u item\u image\u参数
如下所示

>>  user_item_image_params
=> {"picture"=>[#<ActionDispatch::Http::UploadedFile:0x007f67d9b77d28 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-mjk73n.JPG>, @original_filename="IMG_0313.JPG", @content_type="image/jpeg",   @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0313.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77d00 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-edqw7.JPG>, @original_filename="IMG_0314.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0314.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77cd8 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-buatxk.JPG>, @original_filename="IMG_0315.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0315.JPG\"\r\nContent-Type: image/jpeg\r\n">]}
这似乎很有效,但我不知道这看起来太老套了吗?有更好的办法吗?
同样是这样做的,如果验证失败,我如何创建该怎么做的逻辑?通常它类似于
如果x.save…
。我不确定是否应该这样做:如果一个文件无效,则不保存任何内容,或者只保存有效的文件,以及如何执行该操作。

问题在于数据类型。您在模式中使用了
string
数据类型,但传递的对象不是字符串。我建议你使用或宝石。它可以处理你的附件


您仍然不想使用任何gem,那么您需要将这些图片存储在任何服务器上,然后将路径以字符串形式保存在数据库中。

您是否尝试过
params.require(:user\u item\u image)。permit(:picture)
?@dan klasson如果我尝试过,我发现强参数有问题,
user\u item\u image\u params
只是一个空散列。我已经在使用carrierwave。你是说控制器创建操作应该按照我的方式工作吗?
>>  user_item_image_params
=> {"picture"=>[#<ActionDispatch::Http::UploadedFile:0x007f67d9b77d28 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-mjk73n.JPG>, @original_filename="IMG_0313.JPG", @content_type="image/jpeg",   @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0313.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77d00 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-edqw7.JPG>, @original_filename="IMG_0314.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0314.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77cd8 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-buatxk.JPG>, @original_filename="IMG_0315.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0315.JPG\"\r\nContent-Type: image/jpeg\r\n">]}
  def create
    # raise 'foo'
    @user_item = UserItem.find_by_id(params[:user_item_id])
    user_item_image_params[:picture].each do |p|
      user_item_image = @user_item.user_item_images.build(picture: p)
      user_item_image.save
    end
    redirect_to :back
  end