Мне пришлось нарушить соглашение Rails, чтобы удовлетворить потребности бизнеса, и это причиняет мне некоторую боль.Мое намерение состоит в том, чтобы иметь возможность ссылаться на стороннюю таблицу (через Rails) с помощью двух отдельных методов.
В типичном сценарии у вас будет что-то вроде этого:
<code>class Employee < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :employees
end
</Code>
Вы можетезатем обратитесь к компании через объект Employee, выполнив что-то вроде следующего:
e = Employee.find(1)
puts e.company.name
Это прекрасно работает для большинства таблиц, но, скажем, у нас есть таблица, подобная следующей:
<strong>id</strong> - integer
<strong>default_channel_id</strong> - integer and foreign key reference to channel table
<strong>selected_channel_id</strong> - integer and foreign key reference to channel table
Как показано, невозможно просто разрешить соглашению определять, как производится сопоставление, поскольку более одного столбца ссылаются на одно и то же значение внешнего ключа.
Я читал документацию Rails об ассоциациях , но я не нашел ничего, что позволило бы мне определять ассоциации таким образом.Самое близкое, что я получил, было через параметр: foreign_key, но он сам по себе не работал, потому что он создал единственный метод с каналом имени.Вот моя попытка:
class Foo < ActiveRecord::Base
belongs_to :channel, :foreign_key => "default_channel_id"
belongs_to :channel, :foreign_key => "selected_channel_id"
end
Как мне поступить?
Примечание: На всякий случай это помогает, я работаю с Ruby 1.9.2и Rails 3.0.3.