Ruby on rails Rails 3查询-IN(?)可以为空

Ruby on rails Rails 3查询-IN(?)可以为空,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,当隐藏的\u ID为空时,此查询不会返回任何记录 :conditions => ["episodes.show_id in (?) AND air_date >= ? AND air_date <= ? AND episodes.id NOT IN (?)", @show_ids, @start_day, @end_day, hidden_episodes_ids] 但它相当难看(我真正的查询实际上是5行,带有连接和选择等) 是否有一种方法可以使用单个查询并避免不在(null

当隐藏的\u ID为空时,此查询不会返回任何记录

:conditions => ["episodes.show_id in (?) AND air_date >= ? AND air_date <= ? AND episodes.id NOT IN (?)", @show_ids, @start_day, @end_day, hidden_episodes_ids]
但它相当难看(我真正的查询实际上是5行,带有连接和选择等)

是否有一种方法可以使用单个查询并避免
不在(null)


PS:这些是迁移到Rails 3中的旧查询,因此
:conditions

您应该使用
where
方法,因为这将有助于清理所有这些问题。您只需将其链接在一起:

scope = Thing.where(:episodes => { :show_id => @show_ids })
scope = scope.where('air_date BETWEEN ? AND ?', @start_day, @end_day)

if (hidden_episode_ids.any?)
  scope = scope.where('episodes.id NOT IN (?)', hidden_episode_ids)
end

能够有条件地修改作用域可以避免大量重复。

您应该使用
where
方法,因为这将有助于清理所有这些内容。您只需将其链接在一起:

scope = Thing.where(:episodes => { :show_id => @show_ids })
scope = scope.where('air_date BETWEEN ? AND ?', @start_day, @end_day)

if (hidden_episode_ids.any?)
  scope = scope.where('episodes.id NOT IN (?)', hidden_episode_ids)
end

能够有条件地修改作用域可以避免大量重复。

Great:D我必须开始检查所有控制器和模型并重写所有查询:)Great:D我必须开始检查所有控制器和模型并重写所有查询:)