创建基于连接范围的名称

Creating names scoped based on join

我需要在我的 rails 项目中根据它们是否支持 iphone 筛选 'apps'。我试图为此目的创建一个命名范围,但出现以下错误。

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}}

conditions 需要一个散列,而不是一个块。

试试这个:

named_scope :with_iphone_support,
             conditions: 'exists(select * from versions where iphone_support = 1 and app_id = apps.id)'

通常 Rails 2:

应该是这样的
named_scope :with_iphone_support,
  joins: :version,
  conditions: { versions: { iphone_support: true } }

不可能将块传递给类似的东西。

Rails 3.x 和更新版本使用 scope + where 方法定义范围。