Rails - 在所有地方找到id为id的条件

时间:2010-07-29 22:49:26

标签: ruby-on-rails activerecord dataset find conditional-statements

我从我的模型中找到了这个状态,目前看起来像这样。

 @major_set = Interest.find(:all, :conditions => {:id => 1..21})

我想添加一些我刚刚添加的个人ID,如120 ... 130。我试着做...

 @major_set = Interest.find(:all, :conditions => {:id => 1..21, 120..130})

但得到了错误。 “语法错误,意外'}',期待tASSOC ... ns => {:id => 1..21,122..130})”

如何选择多组id以及一些单独的id,即(:conditions => {:id => 1..21,121..140,144,155} ??

2 个答案:

答案 0 :(得分:2)

如果在irb中键入{:id => 1..21, 122..130},则会出现错误,因为它不是有效的ruby语法。这被解释为哈希,其中第一个元素是:id => 1..21,第二个元素缺少它的键。 为了使其成为有效的ruby表达式,您需要输入:

{:id=>[1..21, 122..130]}

但我不认为ActiveRecord会接受这种语法。所以你可能需要:

:conditions => "id BETWEEN 1 AND 21 OR id BETWEEN 122 AND 130"

这适用于MySQL。我不知道它是否适用于其他数据库。

答案 1 :(得分:2)

您可以将范围转换为数组并将它们一起添加。 E.g。

@major_set = Interest.find(:all, 
    :conditions => {:id => (1..21).to_a + (120..130).to_a})

如果您想添加单个ID,则可以将它们添加到数组中。 E.g。

ids_to_find = (1..21).to_a + (120..140).to_a
ids_to_find << 144
ids_to_find << 145
@major_set = Interest.find(:all, :conditions => { :id => ids_to_find })