创建基于连接的作用域名称

时间:2015-02-25 21:08:14

标签: ruby-on-rails ruby activerecord named-scope

我需要过滤器'应用程序'在我的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 个答案:

答案 0 :(得分:1)

条件需要散列,而不是块。

试试这个:

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

答案 1 :(得分:1)

一般来说,Rails 2看起来应该是这样的:

named_scope :with_iphone_support,
  joins: :version,
  conditions: { versions: { iphone_support: true } }

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

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