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

时间:2013-03-15 23:19:41

标签: 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
    end
  end 
end

在模型中我有另一种方法可以处理刚刚保存的上传:

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

它给我一个错误,即process_name

没有定义方法Upload

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

2 个答案:

答案 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)

它不是 - 它是为定义的,而不是实例。

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