Rails - найти условие с идентификаторами повсюду - PullRequest
1 голос
/ 30 июля 2010

У меня есть условие поиска из моей модели, которое в настоящее время выглядит следующим образом.

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

Я хотел бы добавить еще несколько отдельных идентификаторов, которые я только что добавил, которые равны 120 ...130.Я пытался сделать ...

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

, но получил ошибку."синтаксическая ошибка, неожиданное '}', ожидание tASSOC ... ns => {: id => 1..21, 122..130})"

Как я также могу выбрать несколько наборов идентификаторовкак, возможно, некоторые индивидуальные идентификаторы, то есть (: условия => {: id => 1..21, 121..140, 144, 155} ??

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Вы можете конвертировать диапазоны в массивы и складывать их вместе.Например,

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

Если вы хотите добавить отдельные идентификаторы, вы можете просто добавить их в массив.Например,

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 })
2 голосов
/ 30 июля 2010

Если вы введете {:id => 1..21, 122..130} внутри irb, вы получите сообщение об ошибке, так как это недопустимый синтаксис ruby.Это интерпретируется как хеш, где первый элемент равен :id => 1..21, а второй не имеет своего ключа.Чтобы сделать его допустимым выражением ruby, вам нужно набрать:

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

Но я не думаю, что ActiveRecord примет этот синтаксис.Поэтому вам может понадобиться:

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

Это работает в MySQL.Я не знаю, будет ли это работать в других базах данных.

...