我的控制器中有以下方法:
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_name
Upload
问题是什么?如何从控制器更新模型中刚刚保存的文件的属性? 提前谢谢。
答案 0 :(得分:7)
在Ruby中,名称前面用self.
定义的方法是类方法。这意味着您只能在类本身上调用此类方法,而不能在其实例上调用。
这意味着:
upload = Upload.new()
upload.process_name
导致错误
虽然:
Upload.process_name
将调用该方法。
由于您真正想要做的是在process_name
类的实例中调用Upload
,您可以通过从方法定义中删除self.
来更正代码,从而导致:< / p>
def process_name
update_attributes(:user_id => current_user.id)
update_attributes(:defined => "no")
end
答案 1 :(得分:2)
它不是 - 它是为类定义的,而不是实例。
你试图在一个实例上调用它。使它成为一个实例方法。