如何将文件的二进制文件发送到params并使用paperclip_database将其保存在DB中

时间:2018-05-29 12:21:05

标签: ruby-on-rails-3 paperclip

抱歉也许是新手问题。 我想使用paperclip和paperclip_database gems来附加和保存我的数据库中的文件。 但我坚持将视图中的文件数据发送到控制器。 我已经从thisthis资源中完成了所有操作。结果我有下一个模型:

class User < ActiveRecord::Base
  has_many :certificates, :dependent => :destroy
  accepts_nested_attributes_for :certificates, :allow_destroy => true
end
class Certificate < ActiveRecord::Base
  belongs_to :user

  attr_accessor :image
  has_attached_file :image,
                    :storage => :database,
                    :database_table => 'image_files',
                    :cascade_deletion => true
end

在控制器中

Users_controller
  def new
    @user = User.new
    @user.certificates.build
    ~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~
  end

  def create
    @user = User.new(params[:user])
    ~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~
  end
end

我的观点表是:

<%= form_tag @user, method: :put, :html => { :multipart => true } do |f|%>
  <%= fields_for each_event_entry.certificates.first do |c| %>
    <tr>
      <th>Certificate</th>
      <td>
        <%= c.file_field :image %>
      </td>
    </tr>
  <% end %>
<% end %>

但是当我附上一个文件并尝试提交时,我只能在params中找到一个文件名:

{
 "user" => {"some"=>"params"}
 "certificate"=>{"image"=>"IMG_1642.JPG"}
 }

并且无需附加文件即可保存证书。 任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

最后,我发现了问题。

“ form_tag”表单似乎不需要:html属性,因此html表单应如下所示:

<%= form_tag @user, :multipart => true do |f| %> 

就我而言,也不需要方法:

希望这会对某人有所帮助。