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

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

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

Cez*_*zar 7

在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)