试图将变量的内容分配给params [:

时间:2016-06-14 14:10:43

标签: ruby-on-rails paperclip

我需要在按下提交键之前获取表单的内容以保存用户输入。如果提交表单并且验证失败,则用户输入将丢失。

我使用会话变量使表单的主要内容正常工作。但是我想从回形针中取出参数[:images]并将其保存到表格中的列中,然后将其加载回参数[:images]

我的表单有

<div class="field" title="You may attach one or more documents to this observation: Pictures, word documents, spreadsheets, etc">
  <%= f.label :Upload_attachments %><br>
  <%= file_field_tag "images[]", type: :file,  multiple: true %>
</div>

在用于创建的respond_to中,我可以将params [:images]的内容写入带有

的表中
 if params[:images]
      temp_data = TempDatum.create( item: '2',  data: params[:images])
    end

这样可以在数据中产生类似以下内容的内容

  

[#,   @original_filename =&#34; 2016 06 13 capture.JPG&#34;,   @content_type =&#34; image / jpeg&#34;,@ headers =&#34; Content-Disposition:form-data;   命名= \&#34;图像[] \&#34 ;; filename = \&#34; 2016 06 13   capture.JPG \&#34; \ r \ nConContent-Type:image / jpeg \ r \ n&#34;&gt;]

在我的创作中,我有以下

 @image_data = TempDatum.last
     if @image_data.present?
       # params[:images] = @image_data.data
       params[:images] =  '[#<ActionDispatch::Http::UploadedFile:0xe4a46e8 @tempfile=#<Tempfile:C:/Users/cmendla/AppData/Local/Temp/RackMultipart20160614-13124-iib9h0.JPG>, @original_filename="2016 06 13 capture.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"images[]\"; filename=\"2016 06 13 capture.JPG\"\r\nContent-Type: image/jpeg\r\n">]'
       $temp1 = 'got here'
     end

我尝试了各种方法尝试将TempDatum.data的内容放入params [:images]现在的方式,我只是尝试从表中的数据字段中获取原始数据。

如果将params [:images]设置为TempDatum.data中给定记录的值,我需要做什么。

1 个答案:

答案 0 :(得分:1)

您尝试做的事情将无法奏效,而且过度设计过度。 params对象是ActionController::Parameters,因此,它永远不会在创建它的控制器的上下文之外访问(无法在视图中访问它)。

以下是您需要做的事情:

首先,确保您在new操作中实例化您尝试创建的对象,并确保将表单映射到该对象。

其次,您需要在create操作开始时再次实例化对象。然后,您应该对该对象的save操作有条件。如果save因验证而失败,render :new表单将保留输入的数据。

def new
    # map this to your form_for
    @object = Model.new
end

def create
    @object = Model.new(params)
    #  other logic...
    if @object.save
        # do what you need to do if everything is valid...
    else
        render :new
    end
end