2013-03-15 91 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 
相关问题