Paperclip 不会将图像插入数据库 (Rails 4 + Paperclip 4.2.1)
Paperclip doesn't insert image to database (Rails 4 + Paperclip 4.2.1)
当我尝试通过回形针将图像上传到数据库时,它总是忽略图像列。我不确定为什么它不起作用,我对回形针做了很多研究,例如github, YouTube 和那些教程完全一样。我想我所有的代码都是正确的,但我不知道问题出在哪里,请指出。
控制台信息
Started POST "/categories" for 127.0.0.1 at 2015-04-13 17:07:49 +1000
Processing by CategoriesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DIR1d3lWrcwcylkelLsRm/262BRZqu5w3cmrMP/5LV0=", "category"=>{"name"=>"Food", "parent_category_id"=>"", "description"=>""}, "commit"=>"Create Category"}
(0.1ms) begin transaction
SQL (0.4ms) INSERT INTO "categories" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", "2015-04-13 07:07:49.850360"], ["description", ""], ["name", "Food"], ["updated_at", "2015-04-13 07:07:49.850360"]]
(9.3ms) commit transaction
Redirected to http://localhost:3000/categories/1
Completed 302 Found in 15ms (ActiveRecord: 9.7ms)
宝石文件
source 'https://rubygems.org'
gem 'rails', '4.1.6'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'spring', group: :development
gem 'paperclip', '~> 4.2.1'
gem 'bootstrap-sass'
gem 'jquery_mobile_rails'
型号class
class Category < ActiveRecord::Base
has_attached_file :photo, :styles => {:medium => "300x300", :thumb => "100x100"}
validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\Z/
has_many :children, class_name: "Category", foreign_key: "parent_category_id"
belongs_to :parent, class_name: "Category", foreign_key: "parent_category_id"
#has_many :products
end
然后我在控制器中添加列
def category_params
params.require(:category).permit(:name, :parent_category_id, :description, :photo)
end
像这样更改 _form.html.erb 文件
<%= form_for @category, :url => categories_path, :html => {:multipart => true} do |f| %>
...
<div class="field">
<%= f.label :photo %><br>
<%= f.file_field :photo %>
</div>
...
现在的schema.rb文件是这样的:
create_table "categories", force: true do |t|
t.string "name"
t.integer "parent_category_id"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.string "photo_file_name"
t.string "photo_content_type"
t.integer "photo_file_size"
t.datetime "photo_updated_at"
end
问题已从 here 解决,希望这能帮助遇到同样问题的人
我认为问题是由使用 jquery_mobile_rails gem 引起的,我需要像这样更改 _form.html.erb 文件(添加 "data-ajax" => false)
= form_for(@category, :html => { :multipart => true, "data-ajax" => false}) do |f|
当我尝试通过回形针将图像上传到数据库时,它总是忽略图像列。我不确定为什么它不起作用,我对回形针做了很多研究,例如github, YouTube 和那些教程完全一样。我想我所有的代码都是正确的,但我不知道问题出在哪里,请指出。
控制台信息
Started POST "/categories" for 127.0.0.1 at 2015-04-13 17:07:49 +1000
Processing by CategoriesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DIR1d3lWrcwcylkelLsRm/262BRZqu5w3cmrMP/5LV0=", "category"=>{"name"=>"Food", "parent_category_id"=>"", "description"=>""}, "commit"=>"Create Category"}
(0.1ms) begin transaction
SQL (0.4ms) INSERT INTO "categories" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", "2015-04-13 07:07:49.850360"], ["description", ""], ["name", "Food"], ["updated_at", "2015-04-13 07:07:49.850360"]]
(9.3ms) commit transaction
Redirected to http://localhost:3000/categories/1
Completed 302 Found in 15ms (ActiveRecord: 9.7ms)
宝石文件
source 'https://rubygems.org'
gem 'rails', '4.1.6'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'spring', group: :development
gem 'paperclip', '~> 4.2.1'
gem 'bootstrap-sass'
gem 'jquery_mobile_rails'
型号class
class Category < ActiveRecord::Base
has_attached_file :photo, :styles => {:medium => "300x300", :thumb => "100x100"}
validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\Z/
has_many :children, class_name: "Category", foreign_key: "parent_category_id"
belongs_to :parent, class_name: "Category", foreign_key: "parent_category_id"
#has_many :products
end
然后我在控制器中添加列
def category_params
params.require(:category).permit(:name, :parent_category_id, :description, :photo)
end
像这样更改 _form.html.erb 文件
<%= form_for @category, :url => categories_path, :html => {:multipart => true} do |f| %>
...
<div class="field">
<%= f.label :photo %><br>
<%= f.file_field :photo %>
</div>
...
现在的schema.rb文件是这样的:
create_table "categories", force: true do |t|
t.string "name"
t.integer "parent_category_id"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.string "photo_file_name"
t.string "photo_content_type"
t.integer "photo_file_size"
t.datetime "photo_updated_at"
end
问题已从 here 解决,希望这能帮助遇到同样问题的人
我认为问题是由使用 jquery_mobile_rails gem 引起的,我需要像这样更改 _form.html.erb 文件(添加 "data-ajax" => false)
= form_for(@category, :html => { :multipart => true, "data-ajax" => false}) do |f|