从另一个访问一个模型

时间:2011-03-21 23:41:55

标签: ruby-on-rails ruby-on-rails-3 model

我有一个执行算法的模型方法,还有另一个模型,在保存之后,在某些情况下,需要刷新算法结果。

所以,我希望能够做到这样的事情:

class Model1 < ActiveRecord::Base
  after_save :update_score

  def update_score
    if ...
      ...
    else
      # run_alg from class Model2
    end
  end
end

class Model2 < ActiveRecord::Base
  def run_alg
    ...
  end
end

这是可能的还是我必须将run_alg移动/复制到application.rb?

2 个答案:

答案 0 :(得分:2)

如果它是一个类方法,你可以只调用Model2.run_alg,否则如果它是一个实例方法,你需要有一个Model2实例,可以像@model2_instance.run_alg一样调用(其中@ model2_instance是Model2的实例变量。

班级方法:

class Model2 < ActiveRecord::Base
  def self.run_alg
    ...
  end

  # or

  class << self
     def run_alg
     ...
     end
  end
end

实例方法:

class Model2 < ActiveRecord::Base
  def run_alg
    ...
  end
end

要了解有关类方法和实例方法的更多信息,请check this out

答案 1 :(得分:2)

通过添加Model2

,将instance_method中的方法更改为self.
class Model2 < ActiveRecord::Base
  def self.run_alg
    ...
  end
end

并将Model1称为Model2.run_alg