2013-03-15 93 views
1

我在我的控制器下面的方法:Ruby on Rails的,請從模型的功能在控制器

def create 
    p_attr=params[:upload] 
    p_attr[:upload] = params[:upload][:upload].first if params[:upload][:arraydb].class == Array 
    @upload = Upload.new(p_attr) 

    respond_to do |format| 
    if @upload.save 
     @arraydb.process_name 
    end 
    end 
end 

的模式,我有另一種方法,我可以處理剛保存上傳:

def self.process_name 
    update_attributes(:user_id => current_user.id) 
    update_attributes(:defined => "no") 
end 

它給我的方法process_nameUpload

沒有定義什麼是該問題的錯誤,我怎麼可以更新屬性剛剛保存在控制器模型中的文件? 在此先感謝。

回答

2

它不是它定義的,而不是實例。

您試圖在實例上調用它。使其成爲實例方法。

7

在Ruby中,名稱前是self.的方法是類方法。這意味着您只能在類本身而不是在其實例上調用這些方法。

這意味着:

upload = Upload.new() 
upload.process_name 

導致錯誤

雖然:

Upload.process_name 

將調用該方法。

既然你真正想做的事是調用process_nameUpload類的實例,你可以從你的方法定義刪除self.糾正你的代碼,從而導致:

def process_name 
    update_attributes(:user_id => current_user.id) 
    update_attributes(:defined => "no") 
end 
相關問題