Создание имен областей действия на основе соединения
Мне нужен фильтр 'apps' в моем проекте rails на основе того, поддерживают ли они iphone. Я пытаюсь создать именованную область для этой цели, но я получаю следующую ошибку.
app/models/app.rb:21: syntax error, unexpected '}', expecting =>
app/models/app.rb:21: syntax error, unexpected '}', expecting =>
app/controllers/apps_controller.rb:5:in `index'
app.rb
named_scope :with_iphone_support,
joins: :version,
conditions: {:versions.any{ |v| v.iphone_support == true}}
2 ответа
Решение
Обычно это должно выглядеть примерно так для Rails 2:
named_scope :with_iphone_support,
joins: :version,
conditions: { versions: { iphone_support: true } }
Нельзя передать в блоке что-то подобное.
Rails 3.x и новее используют scope
+ where
метод определения границ.
Условия ожидают хеш, а не блок.
Попробуй это:
named_scope :with_iphone_support,
conditions: 'exists(select * from versions where iphone_support = 1 and app_id = apps.id)'