0
我有一個回形針奇怪的問題。以下是我的pry會話來驗證此問題。當我上傳我的文件時,回形針附件是正確構建的,但是當我去保存數據庫中的對象時,數據丟失了!不能拿回形針附加文件(回形針版本3.5.1)
我試圖上傳的圖像已成功上傳到正確的位置。
7: flash[:notice] = "Item created"
8: item = Item.new(strong_params)
9: item.user = current_user
10: item.photo = params[:item][:photo]
11: item.save
=> 12: binding.pry
13: redirect_to item
14: end
15: def strong_params
16: params.require(:item).permit!
17: end
pry(#<ItemsController>)> item.errors.messages
=> {}
pry(#<ItemsController>)> dbItem = Item.find(item.id)
=> #<Item id: 2, user_id: 1, name: "", description: "", created_at: "2013-10-16 23:49:06", updated_at: "2013-10-16 23:49:06", photo_file_name: nil, photo_content_type: "image/jpeg", photo_file_size: 11763, photo_updated_at: "2013-10-16 23:49:06">
pry(#<ItemsController>)> dbItem.photo_file_name == item.photo_file_name
=> false
pry(#<ItemsController>)> puts dbItem.photo_file_name
=> nil
pry(#<ItemsController>)> puts item.photo_file_name
item.jpg
=> nil
pry(#<ItemsController>)>
有問題的控制器動作
def create
flash[:notice] = "Item created"
item = Item.new(strong_params)
item.user = current_user
item.photo = params[:item][:photo]
item.save
binding.pry
redirect_to item
end
def strong_params
params.require(:item).permit!
end
項目表
create_table "items", force: true do |t|
t.integer "user_id"
t.string "name"
t.string "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
項目模型
class Item < ActiveRecord::Base
belongs_to :user
attr_accessor :photo_file_name
has_attached_file :photo,
:url => "/assets/photos/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/items/:id/:style/:basename.:extension"
validates_attachment_presence :photo
end
這正是它是什麼..但爲什麼? –
爲什麼? 'attr_accessor'爲named屬性定義了一個getter和setter。由於您已經有一個名爲「photo_file_name」的數據庫字段,因此'attr_accessor:photo_file_name'會覆蓋activerecord爲您提供的那個db字段的訪問器。你爲什麼要定義attr_accessor?回形針當然不會告訴你。 – jemminger