Добавление рельсовой ассоциации активных записей в цикле - PullRequest
0 голосов
/ 26 августа 2010

Я хочу добавить has_many посредством ассоциации к классу модели activerecord для каждого символа в массиве.например

PeopleOrganisation::ROLES.each do |role|
    has_many role.to_s.pluralize.to_sym, :through => :people_organisations, :source => :person,
      :conditions => "people_organisations.role = '#{role.to_s}'" do
      def << (object)
        PeopleOrganisation.send(:with_scope, :create => {:role => **role**}) { self.concat object }
      end
      end
  end

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

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Попробуйте это:

PeopleOrganisation::ROLES.each do |role|
  has_many(role.to_s.pluralize.to_sym, 
             :through => :people_organisations, :source => :person,
             :conditions => ["people_organisations.role = ?", role]
  ) do
    define_method("<<") do |object|
      PeopleOrganisation.send(:with_scope, :create => {:role => role}) { 
        self.concat object 
      }
    end
  end
end
0 голосов
/ 26 августа 2010

Вместо определения метода с помощью def вы можете попробовать define_method метод:

PeopleOrganisation::ROLES.each do |role|
  has_many role.to_s.pluralize.to_sym, :through => :people_organisations, :source => :person,
           :conditions => "people_organisations.role = '#{role.to_s}'" do
    define_method(:<<) do |object|
      PeopleOrganisation.send(:with_scope, :create => {:role => role}) { self.concat object }
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...