Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails,从控制器中的模型调用函数_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails,从控制器中的模型调用函数

Ruby on rails RubyonRails,从控制器中的模型调用函数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的控制器中有以下方法: 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

我的控制器中有以下方法:

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
它给了我一个错误,即没有为
上载定义方法
进程名称

问题是什么?如何从控制器更新模型中刚保存的文件的属性?
提前感谢。

它不是为类定义的,不是为实例定义的


你试图在一个实例上调用它。使其成为实例方法。

它不是-它是为类定义的,不是为实例定义的


你试图在一个实例上调用它。使其成为一个实例方法。

在Ruby中,在名称前面用
self.
定义的方法是类方法。这意味着您只能在类本身上调用此类方法,而不能在其实例上调用

这意味着:

upload = Upload.new()
upload.process_name
导致错误

而:

Upload.process_name
将调用该方法

由于您真正想做的是在
Upload
类的实例中调用
process\u name
,因此可以通过从方法定义中删除
self.
来更正代码,从而导致:

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

在Ruby中,在名称前面用
self.
定义的方法是类方法。这意味着您只能在类本身上调用此类方法,而不能在其实例上调用

这意味着:

upload = Upload.new()
upload.process_name
导致错误

而:

Upload.process_name
将调用该方法

由于您真正想做的是在
Upload
类的实例中调用
process\u name
,因此可以通过从方法定义中删除
self.
来更正代码,从而导致:

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