图像上传到数据库

时间:2014-07-31 07:24:03

标签: forms ruby-on-rails-4 image-uploading

我尝试按照这些说明为特定类型的每个对象上传两张图片:http://archive.railsforum.com/viewtopic.php?id=4642

这就是我的模特的样子:

模型:

class Mepager < ActiveRecord::Base
    has_many :images
end

class Image < ActiveRecord::Base
    belongs_to :mepager

     def image_file=(input_data)
         self.filename = input_data.original_filename
         self.content_type = input_data.content_type.chomp
         self.binary_data = input_data.read
     end
end

架构:

create_table "images", force: true do |t|
    t.string   "content_type"
    t.string   "filename"
    t.binary   "binary_data"
    t.string   "connector"
    t.integer  "mepager_id"
    t.datetime "created_at"
    t.datetime "updated_at"
end

控制器

def new
@mepager = @pimp.build_mepager
@pre_image = @mepager.images.build(:connector => "pre")
@post_image = @mepager.images.build(:connector => "post")
end

def mepager_params
  params.require(:mepager).permit(:id,
    :images_attributes => [:id, :content_type, :filename, :binary_data, :mepager_id, :connector])
end

形式:

<%= simple_form_for :mepager, url: mepager_path, html: {multipart: true} do |f| %> 


<%= f.simple_fields_for :images, @pre_image do |image| %>
    <b>Pre-Image</b>
        <%= image.input :image_file, :as => :file, label: false, input_html:{:size => 15} %>
        <%= image.input :connector %>               
<% end %>

<%= f.simple_fields_for :images, @post_image do |image| %>
    <b>Post-Image</b>
        <%= image.input :image_file, :as => :file, label: false, input_html:{:size => 15} %>
        <%= image.input :connector %>               
<% end %>
<% end %>

但如果我选择该表单中的文件并提交,则不会保存!

任何?

祝你好运!

1 个答案:

答案 0 :(得分:1)

为什么不要只是将图像链接保存到数据库,然后将图像上传到服务器上的给定目录,它更好,更安全。为此,你必须使用回形针查看这个例子 首先在gem文件中添加paperclip gem,如下所示

gem "paperclip", "~> 2.3"

在项目目录中运行bundle install之后

然后生成一个迁移,将字段添加到您的表中,就像这样

rails g migration add_attach_paperclip

然后将这些列添加到您的表

class AddattachPaperclip < ActiveRecord::Migration
def self.up
add_column :images, :attach_file_name, :string
add_column :images, :attach_content_type, :string
add_column :images, :attach_file_size, :integer
add_column :images, :attach_updated_at, :datetime
end

def self.down
remove_column :images, :attach_file_name
remove_column :images, :attach_content_type
remove_column :images, :attach_file_size
remove_column :images, :attach_updated_at
end
end

你去耙移民

通过添加此

更改图像模型后
has_attached_file :pic

将文件字段的名称更改为pic 当您想要显示图像时,只需使用

即可
<%= @image.pic.url %>