2009-10-30 2 views
0

Мне нужно передать себя как объект, а не класс: условия string, есть ли способ сделать это?Пропустить объект to has_many: условия

has_many :topic, 
:class => 'FileTopic', 
:conditions => "id in (select * from file_topics where program_id = #{self.id})" 

Моя проблема: я всегда даю мне идентификатор класса, но не экземпляр класса. Я предполагаю, что has_many оценивается на уровне класса?

Благодаря

ответ

2

Он evalued при загрузке класса, да. Но только если вы используете двойные кавычки - переменные в одиночных кавычках заполняются при вызове. More info here.

Однако, возможно, вам стоит заглянуть в named scopes?

2

Много ли метод класса. Поэтому любая ссылка на «я» в своих аргументах является ссылкой на класс.

Похоже, вы хотите указать внешний ключ на стороне принадлежности.

Вы пробовали это еще:

has_many :topic, :class => 'FileTopic', :foreign_key => "program_id" 

Вы должны действительно прочитанный через ActiveRecord::Associations documentation, если у вас еще нет. Существует очень мало проблем с объединением, которые не могут быть решены с использованием правильного набора опций, чтобы принадлежать_to/has_one/has_many

+0

Пример, который я покажу здесь, намного проще, чем реальная вещь. У ассоциации действительно есть UNION и некоторые виртуальные таблицы. – penger

+0

Что касается рельсов, UNIONs могут быть выполнены с помощью полиморфных ассоциаций. Вероятно, Rails способ делать виртуальные таблицы, не видя того, чего вы пытаетесь достичь, я не могу советовать. Это возможно: через отношения на сложной ассоциации, может работать. – EmFi

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