2013-10-29 41 views
1

我有一個問題,將圖像名稱存儲到數據庫中。圖片上傳到文件夾工作正常,但圖像的名字將不會保存到數據庫圖像名稱未插入數據庫在軌道上的紅寶石

型號代碼:

class Post < ActiveRecord::Base 
    attr_accessible :name, :imag 
    attr_accessor :imag 

    def self.save(upload) 
    name = upload['imag'].original_filename 
    directory = 'public/data' 
    # render :text => directory 
    # create the file path 
    path = File.join(directory,name) 
    # write the file 
    File.open(path, "wb") { |f| f.write(upload['imag'].read)} 
    end 

end 

控制器代碼:

def create 
    @a=params[:post][:imag].original_filename /* how to pass in this image name into params[:post] */ 
    pos= Post.save(params[:post]) 
    if pos 
     redirect_to :action =>"index" 
    else 
     redirect_to :action =>"posts" 
    end 
    end 

任何人指導我存檔這一個。提前致謝。

回答

0

我找到了解決方案。在Post.create函數中手動添加圖像的原始文件名。

控制器代碼:

def create 
      Post.super(params[:post]) 
      pos= Post.create(:name=>params[:post][:name],:image=>params[:post][:image].original_filename) /* here is added image value from uploaded input */ 
      if pos 
       redirect_to :action =>"index" 
      else 
       redirect_to :action =>"posts" 
      end 

      end 

MODLE代碼:

class Post < ActiveRecord::Base 
    attr_accessible :name, :image 

    #attr_accessor :imag 
    def self.super(upload) 
    name = upload['image'].original_filename 
    directory = 'public/data' 
    # render :text => directory 
    # create the file path 
    path = File.join(directory,name) 
    # write the file 
    File.open(path, "wb") { |f| f.write(upload['image'].read)} 
    end 

end 
0

這是因爲你的救助者與ActiveRecord保存衝突,你甚至沒有在該方法中保存任何東西。

呼叫

super(upload) 
在您保存方法(應該是第一行)

+0

我發現下面張貼的解決方案。感謝您的支持。 – Sankar

0

要覆蓋ActiveRecord的保存方法與自定義self.save類方法。另外,我建議使用像回形針或類似的上傳寶石

+0

我已經使用了paperclip gem,但是下面的錯誤會在使用rails 4.0.0的模型im中發生。 錯誤:attr_accessible'是從Rails中提取出來的。 – Sankar

+1

該評論沒有意義。你已經用你自己的方法覆蓋了默認的ActiveRecord保存方法。你的方法不會寫任何東西到數據庫。這就是爲什麼你沒有任何信息插入到數據庫中,因爲你沒有將它插入到你的自定義保存方法 – cpjolicoeur

+0

我發現下面的解決方案。感謝您的支持。 – Sankar