метод exclude в модуле для использования в нескольких моделях - PullRequest
0 голосов
/ 22 января 2012

поэтому у меня есть один довольно простой метод в модели:

  def log
    self.statistics.build()
    self.save
    return
  end

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

module Statistic
  def log
    self.statistics.build()
    self.save
    return
  end
end

Я добавил файл в пути автозагрузки и включил его в мою модель (включение работает нормально).

class Foo < ActiveRecord::Base
  include Statistic
end

Попытка вызова метода .log приводит к ошибке: undefined method new 'для статистики: Модуль the raised line number is the self.statistics.build () `line.

есть идеи, почему это не работает?

спасибо за все подсказки!Пожалуйста, оставьте комментарий, если что-то неясно.

Ответы [ 2 ]

1 голос
/ 22 января 2012

Я думаю, что это конфликт имен.

Кажется, у вас есть has_many :statistics, по умолчанию это будет искать класс с именем Statistic.

Но это то же имя, что и модуль, который вы создали.

Я предлагаю переименовать ваш модуль в StatisticsExtensions или что-то в этом роде.

0 голосов
/ 22 января 2012

Причина, по которой вы видите отсутствующий метод для нового, состоит в том, что сборка является псевдонимом нового в источнике ActiveRecord.Предполагается, что статистика является активным отношением записей, и это не так.

https://github.com/rails/rails/blob/d22592a05b299c21e30ec8b38890a178dca863b4/activerecord/lib/active_record/relation.rb#L83

...