Как добавить поля атрибутов модели путем исправления обезьян? - PullRequest
0 голосов
/ 18 февраля 2020

Я уже знаю, как добавить (включить, предварительно добавить) методы в класс. Но как добавить атрибутов ? Например, я хотел бы пропатчить базовую модель, добавив поле has_one , как мне это сделать? Заранее спасибо.

Пример

  class Project < ActiveRecord::Base
  include Redmine::SafeAttributes
  include Redmine::NestedSet::ProjectNestedSet

  # Specific overridden Activities
  has_many :time_entry_activities
  has_many :memberships, :class_name => 'Member', :inverse_of => :project
  # Memberships of active users only
  has_many :members,
           lambda { joins(:principal).where(:users => {:type => 'User', :status => Principal::STATUS_ACTIVE}) }

Я хотел бы добавить еще одно поле has_many / has_one, не редактируя этот класс - который находится в ядре проектов, но как патч обезьяны -> include еще один has_many из каталога плагинов

1 Ответ

0 голосов
/ 19 февраля 2020

Нашел решение.

def self.included(base) # :nodoc:
    base.class_eval do
      unloadable
      has_many :project_descriptions
    end
  end
  Project.send(:include, Module::Patches::ProjectPatch)

Добавление полей в класс, base здесь означает включенный класс, class_eval оценивается в контексте этого класса. Дополнительная информация о class_eval, instance_eval по https://www.jimmycuadra.com/posts/metaprogramming-ruby-class-eval-and-instance-eval/

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