Доступ к одной модели из другой - PullRequest
3 голосов
/ 22 марта 2011

У меня есть метод модели, который выполняет алгоритм, и есть другая модель, которая после сохранения в некоторых случаях должна обновить результат алгоритма.

Итак, я хотел бы иметь возможность сделать что-то вроде этого:

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 ]

2 голосов
/ 22 марта 2011

Измените метод в вашем Model2 на instance_method, добавив self.

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

и назовите его из Model1 как Model2.run_alg

2 голосов
/ 22 марта 2011

Если это метод класса, вы можете просто вызвать 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

Чтобы узнать больше о методах класса и методах экземпляра, посмотрите это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...