Мне нужно сослаться на собственную модель в объявлении: has_many.
У меня есть класс, который мы назовем Foo.Foo: has_many Bar.Foo имеет логический атрибут randomize, который определяет порядок столбцов в отношении: has_many.Если randomize имеет значение true, то они упорядочиваются по «RAND ()» или «RANDOM ()» в зависимости от БД.Если нет, они упорядочены по id.Я должен сделать это заявление об ассоциации, потому что я использую нетерпеливую загрузку.Мне хорошо известно, что я могу определить метод в Foo, который возвращает то, что я хочу, но мне нужно, чтобы все загружалось сразу, иначе 400-500 запросов выполняются по отдельности = плохо.
class CreateFoo < ActiveRecord::Migration
def self.up
create_table :foos do |t|
t.string :name
t.boolean :randomize, :default => false
end
end
end
class CreateBar < ActiveRecord::Migration
def self.up
create_table :bars do |t|
t.string :name
t.references :foo
end
end
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
class Foo < ActiveRecord::Base
# this is the line that doesn't work
has_many :bars, :order => self.randomize ? 'RAND()' : 'id'
end
Как получить доступ к свойствам self в объявлении has_many?
Вещи, которые я попробовал и потерпел неудачу:
- создание метода Foo, который возвращает правильную строку
- создание лямбда-функции
- crying
Возможно ли это?
Похоже, проблема в том, что "self" в: has_many ISN'T типа Foo:
undefined method `randomize' for #<Class:0x1076fbf78>
равно единице.из ошибок, которые я получаю.Обратите внимание, что это общий класс, а не объект Foo ... Почему ??