Плагин Rails 3 - Active Record table_name_prefix - PullRequest
0 голосов
/ 10 августа 2011

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

Для организации таблиц в базе данных подсистем я хотел бы использовать table_name_prefix из ActiveRecord Плагин.

Если я добавлю init.rb плагина, команда config.active_record.table_name_prefix = "per _" основное приложение не будет работать, потому что ActiveRecord попытается найти для " per_users ", но единственное, что я хочу, это то, что только плагин в моем основном приложении использует префикс" per _ ".

Я попытался создать папку rails в моем плагине с помощью команды выше, но возникает та же проблема, все приложение пытается найти имя таблицы с префиксом.

Альтернативой является использование set_table_name в модели плагина, но это не очень хорошо для меня, потому что я разрабатываю подсистемы как плагин rails, и я не хочу менять модели, когда помещаю подсистему в основное приложение. .

Кто-нибудь может мне помочь?

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Чтобы каждый плагин имел собственный префикс, для Rails 3 попробуйте организовать ваши модели внутри плагина в пространстве имен:

class Foo::Bar < ActiveRecord::Base
 ...
end

module Foo
  def self.table_name_prefix
    'foo_'
  end
end

Это будет работать только внутри плагина, не изменяя ничего внутри основного приложения. Другой подход состоит в том, чтобы использовать некоторую основную модель и наследовать ее от других, таких как:

class Foo < ActiveRecord::Base
  def self.table_name_prefix
    'foo_'
  end
end

class Bar < Foo
 ...
end

иногда этот подход используется для расширения всех моделей дополнительными функциями.

Больше информации в документации по Rails здесь

0 голосов
/ 03 декабря 2013

Взгляните на этот вопрос . Я столкнулся с той же проблемой, забыл, что имя моего приложения (основной модуль) имело то же имя, что и пространство имен для моих моделей.

...