добавить метод в объект-отражение и именованные области - PullRequest
2 голосов
/ 20 февраля 2010

Мне нравится добавлять метод в мое отношение has_many так, как он применяется к объекту отношения.
Я получил заказ, который имеет: has_many line_items
Мне нравится писать такие вещи, как
order.line_items.calculate_total # returns the sum of line_items
это я мог сделать с:
:has_many line_items do def calculate_total ... end end
но это не будет применяться к named_scopes, например, payalbes_only:
order.line_items.payables_only.calculate_total
здесь при вычислении итога будут получены все элементы line_items заказа, а не области действия из payables_only-scope. Мой журнал говорит мне, что область paybles_only даже не применяется к sql.

1 Ответ

1 голос
/ 03 апреля 2010

Один, хотя и некрасивый, способ сделать это - использовать class_eval в классе Array, например:

Array.class_eval do
  def calculate_total
    total = 0
    self.each do |item|
      total = total + item.value if item.class.to_s == 'LineItem'
    end
    return total
  end
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...