2013-10-17 119 views
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 

回答

1

我懷疑你在Papercl attr_accessor :photo_file_name被覆蓋的東西因爲它期望成爲一個activerecord字段。

+0

這正是它是什麼..但爲什麼? –

+1

爲什麼? 'attr_accessor'爲named屬性定義了一個getter和setter。由於您已經有一個名爲「photo_file_name」的數據庫字段,因此'attr_accessor:photo_file_name'會覆蓋activerecord爲您提供的那個db字段的訪問器。你爲什麼要定義attr_accessor?回形針當然不會告訴你。 – jemminger