Ali*_*ina 1 ruby 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
Run Code Online (Sandbox Code Playgroud)
在模型中我有另一种方法,我可以处理刚刚保存的上传:
def self.process_name
update_attributes(:user_id => current_user.id)
update_attributes(:defined => "no")
end
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误,该方法process_name没有定义Upload
问题是什么?如何从控制器更新模型中刚刚保存的文件的属性?提前致谢.
在Ruby中,self.在名称之前定义的方法是类方法.这意味着您只能在类本身上调用此类方法,而不能在其实例上调用.
这意味着:
upload = Upload.new()
upload.process_name
Run Code Online (Sandbox Code Playgroud)
导致错误
而:
Upload.process_name
Run Code Online (Sandbox Code Playgroud)
将调用该方法.
由于您真正想要做的是调用类的process_name实例,因此Upload可以通过self.从方法定义中删除来更正代码,从而导致:
def process_name
update_attributes(:user_id => current_user.id)
update_attributes(:defined => "no")
end
Run Code Online (Sandbox Code Playgroud)