Сделать методы экземпляра модели A доступными в связанной модели B? - PullRequest
1 голос
/ 29 января 2012

Работа с гемом, который позволяет добавить измерение времени (например, start_date и т. Д.) К произвольной модели.

Модуль, реализующий ActsAsTimeable:

module Timeable
  module ActsAsTimeable
    extend ActiveSupport::Concern

    module ClassMethods
      def acts_as_timeable(options ={})
        has_one :timeable_model, :as => :timeable, :class_name => "Timeable::Base", :dependent => :destroy
        ...
        delegate :start_date, :to => :timeable_model, :allow_nil => true
      end
    end
  end
end
ActiveRecord::Base.send :include, Timeable::ActsAsTimeable

Я пропустил детали Timeable :: Base, но у него есть сеттер start_date = (val) и геттер start_date (и, конечно, многие другие).

Проблема:

Из-за метода делегата я могу сделать что-то вроде:

entity1 = Entity1.new (Model with acts_as_timeable added)
entity1.start_date => Sat, 28 Jan 2012

, но я не могу сделать

entity1.start_date = Date.today

Я добавил следующий фрагмент кода до модуля ClassMethods к модулю, реализующему Act_as_timeable:

def start_date=(val)
  build_timeable_model(:timeable => self) unless timeable_model
  timeable_model.start_date=(val) if timeable_model
end

Но это приводит к ActiveRecord :: DangerousAttributeError: start_date = определяется ActiveRecord при попытке инициализации Entity1.new.

1.) Как решить эту проблему?

2.) Существует ли более элегантный способ сделать все открытые методы в Timeable:: База доступна в модели, которая действует без времени, объявляя каждый м вручнуюметод в Timeable :: ActsAsTimeable?

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