首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回形针多幅图像上传

回形针多幅图像上传
EN

Stack Overflow用户
提问于 2013-06-02 22:14:43
回答 1查看 1.1K关注 0票数 1

尝试在不破坏现有数据保存结构的情况下实现这一点。我有一个表单,它将一个图像上传到资产编辑修改了5个图像资产的表单。见下文。。。

表格内容如下:

代码语言:javascript
复制
<%= form_for @asset, :html => { :multipart => true } do |f| %>
<div class="span10">
  <%= render 'shared/asset_errors' %>
  <h3>Upload to Procedure Folder</h3>
</div>
<div class="span5">
  <% @procedures = @patient.procedure_folders.all %>
  <%= f.label :procedure_folder_id, "Procedure" %>
  <%= f.select :procedure_folder_id, @procedures.map { |p|
    [Procedure.find(p.procedure_id).procedure, p.id] } %>
  </div>
  <div class="span5">
    <%= f.label :date %>
    <%= f.text_field :date, 'data-behaviour' => 'datepicker'  %>
  </div>
  <div class="span10">
    <%= f.label :notes %>
    <%= f.text_field :notes %>
  </div>
  <div class="span10">
    <% 5.times do |image| %>
    <p><%= f.file_field :asset, name: "asset[asset][#{image}]",
    id: "asset_asset_#{image}" %></p>
    <% end %>
  </div>
  <div class="span10">
    <%= f.hidden_field :patient_id, value: @patient.id %>
    <%= f.submit "Upload", class: "btn btn-primary" %>
  </div>
  <% end %>

我想要达到的目标--并且阅读了所列的一些方法--是在这个表单中静态地放置5个表单字段。或者用一个“添加另一张照片”按钮来准备jquery。

类和控制器

第一班:

代码语言:javascript
复制
class Asset < ActiveRecord::Base
  attr_accessible :asset, :asset_content_type, :asset_file_name, :asset_file_size, :asset_updated_at, :patient_id, :procedure_folder_id, :date, :notes
  belongs_to :procedure_folder
  belongs_to :patient

  has_attached_file :asset, :styles => { :large => "800x600", 
                                                                             :thumb => "150x150" }

  validates :date, presence: true
  validates :patient_id, presence: true
  validates :asset, :attachment_presence => true

  default_scope order: 'assets.date ASC'
end

主计长:

代码语言:javascript
复制
class AssetsController < ApplicationController
    before_filter :signed_in_user

    def create
        @asset = Asset.new(params[:asset])
        if @asset.save
            flash[:success] = "Images uploaded successfully!"
            redirect_to patient_path(@asset.patient_id)
        else
            flash[:error] = "There was an error, Date and Image is required!"
            redirect_to patient_path(@asset.patient_id)
        end
    end

    def destroy
        @asset = Asset.find(params[:id])
        set_variables
        if !current_user.admin?
            flash[:error] = "You do not have delete priviledges"
            redirect_to procedure_folder_path(@asset.procedure_folder_id)
        else
            @asset.destroy
            flash[:info] = "Image has been deleted and cannot be recovered"
            redirect_to procedure_folder_path(@asset.procedure_folder_id)
        end
    end

    def set_variables
    end
end

我可以采取哪些步骤来有效地保持现有的结构,并避免在第二种形式中添加。这是运行在一个小的生产环境,并希望避免与现有的数据.(在我们使用开发之前,将自然地对其进行测试)。

如有任何想法/建议/解决方案,将不胜感激。

提前谢谢你。

编辑

现在表单正确地出现了,我在上传多个图像时收到以下错误。

代码语言:javascript
复制
 Paperclip::AdapterRegistry::NoHandlerError in AssetsController#create

No handler found for {"0"=>#<ActionDispatch::Http::UploadedFile:0x007f88c517c230 @original_filename="Screen Shot 2013-02-11 at 11.03.46 PM.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"asset[asset][0]\"; filename=\"Screen Shot 2013-02-11 at 11.03.46 PM.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-jzz7cl>>, "1"=>#<ActionDispatch::Http::UploadedFile:0x007f88c563bb40 @original_filename="Screen Shot 2013-03-18 at 10.59.47 PM.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"asset[asset][1]\"; filename=\"Screen Shot 2013-03-18 at 10.59.47 PM.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-1h5qj85>>, "2"=>#<ActionDispatch::Http::UploadedFile:0x007f88c563da30 @original_filename="Screen Shot 2013-03-18 at 11.01.06 PM.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"asset[asset][2]\"; filename=\"Screen Shot 2013-03-18 at 11.01.06 PM.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-1xsd0fk>>}

Rails.root: /Users/sandovalg/Documents/rails_projects/autre_dlz
Application Trace | Framework Trace | Full Trace

app/controllers/assets_controller.rb:5:in `new'
app/controllers/assets_controller.rb:5:in `create'

Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"RjRFHgYu/4fHRl0iksOkivVOR4ikIvavvXxoqSoTMW0=",
 "asset"=>{"procedure_folder_id"=>"1",
 "date"=>"2013-06-04",
 "notes"=>"",
 "asset"=>{"0"=>#<ActionDispatch::Http::UploadedFile:0x007f88c517c230 @original_filename="Screen Shot 2013-02-11 at 11.03.46 PM.png",
 @content_type="image/png",
 @headers="Content-Disposition: form-data; name=\"asset[asset][0]\"; filename=\"Screen Shot 2013-02-11 at 11.03.46 PM.png\"\r\nContent-Type: image/png\r\n",
 @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-jzz7cl>>,
 "1"=>#<ActionDispatch::Http::UploadedFile:0x007f88c563bb40 @original_filename="Screen Shot 2013-03-18 at 10.59.47 PM.png",
 @content_type="image/png",
 @headers="Content-Disposition: form-data; name=\"asset[asset][1]\"; filename=\"Screen Shot 2013-03-18 at 10.59.47 PM.png\"\r\nContent-Type: image/png\r\n",
 @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-1h5qj85>>,
 "2"=>#<ActionDispatch::Http::UploadedFile:0x007f88c563da30 @original_filename="Screen Shot 2013-03-18 at 11.01.06 PM.png",
 @content_type="image/png",
 @headers="Content-Disposition: form-data; name=\"asset[asset][2]\"; filename=\"Screen Shot 2013-03-18 at 11.01.06 PM.png\"\r\nContent-Type: image/png\r\n",
 @tempfile=#<File:/var/folders/8k/ctb40yd92w13qyjj3fn0gdnc0000gn/T/RackMultipart20130604-13969-1xsd0fk>>},
 "patient_id"=>"1"},
 "commit"=>"Upload"}
EN

回答 1

Stack Overflow用户

发布于 2013-10-22 08:54:37

考虑到您要将记录保存到与表单相同的数据库中,您似乎需要折扣使用accepts_nested_attributes_for,这正是我通常使用的剪纸

同时保存多个记录

似乎您的主要问题是同时保存多个记录:

代码语言:javascript
复制
No handler found for {"0"=>

这表明Rails无法计算保存函数,因为它只针对单个params设计。实际上,您必须使用手动SQL查询保存记录,如下所示:

本质上,您必须循环遍历params数组,并以一种大容量的方式保存数据。这里有一个你可以做到的方法:

根据其中一个链接,您可以使用activerecord-import创业板

代码语言:javascript
复制
def create
assets = []
    params[:asset].each do |k,v| 
       assets << Asset.new(params[:asset][k])
    end
    Asset.import assets
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16887820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档