Создание имен областей действия на основе соединения

Мне нужен фильтр '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)'
Другие вопросы по тегам