2009-06-26 2 views
1

Я ищу советы здесь:has_many и наследие схема

У меня есть две таблицы в унаследованной схемы, A и B, вступил на A.somename = B.othername. Оба эти столбца являются строками. Итак, как мне установить отношения между ними в rails (v2.1.0)? Учитывая, что A имеет много B «с, что было бы лучшей практикой:

  1. использование :finder_sql и просто написать SQL SELECT,

  2. настроить связь по другим параметрам (как я знаю, что могу? set :foreign_key = 'othername', но это просто попытается установить отношение A.id = B.othername - что я могу сделать, чтобы настроить правильный?),

  3. что-то еще, что не перешло мне на ум.

Итак, что бы вы предложили?

ответ

1

Если вы застряли с Rails 2.1 по какой-то причине, лучший вариант, похоже, использует set_primary_key, как это:

class A 
    set_primary_key 'somename' 
    has_many :bs, :foreign_key => 'othername' 
end 

Существует также псевдоним, который позволяет использовать атрибуции-подобный синтаксис для этого (self.primary_key = 'somename').

Кстати, если вы в состоянии выполнить обновление до 2.3, вы можете использовать опцию primary_key непосредственно has_many, как это:

has_many :debitos, :primary_key => 'somename', :foreign_key => 'othername' 

Если вы решили использовать это, вам не нужно будет объявить первичный ключ для класса, используя set_primary_key.

+0

Спасибо. Второй пример - это то, чего я пытался безуспешно найти в документах 2.1 API :) К сожалению, обновление до 2.3, хотя и запланировано, сейчас не вариант. Тем не менее, я обнаружил, что это работает в версии 2.1: Класс A set_primary_key: SomeName HAS_MANY: Б. С.,: foreign_key => 'othername' конец –

+0

Ответ отредактирован, чтобы включить собственные выводы Toms'. Я думаю, что эта версия будет более полезна для будущих пользователей –

Смежные вопросы