Фильтрация запросов к базе данных Rails 3 через несколько условий / фильтров - PullRequest
4 голосов
/ 08 марта 2011

Я нахожусь в настоящем затруднительном положении, и я почти уверен, что то, что я пытаюсь сделать, относительно просто. По сути, у меня есть база данных (миграция, чтобы следовать), которая перечисляет группу студентов и информацию о них. Есть четыре столбца: seek_position, min_hourly, max_hourly и start_weeks, и я должен иметь возможность фильтровать его на внешнем интерфейсе сайта. Прямо сейчас все, что я могу выяснить, как это сделать, это показать страницу со всеми перечисленными на ней пользователями. Я ни в коем случае не ищу раздаточный материал здесь, я уже просмотрел все, что я знаю, и даже попробовал вещи, которые я действительно не понимал, чтобы попытаться заставить это работать. То, что, кажется, сбивает меня с толку, - это найти способ фильтровать по нескольким вещам одновременно. Например, покажите всем студентам со значением seek_position «интернатуры», min_hourly «7», max_hourly «10» и start_weeks от «2 до 4». Есть идеи? Я на Rails 3.0.3 использую ActiveRecord без скаффолдинга. Спасибо:)

Моя миграция:

class CreateStudents < ActiveRecord::Migration
  def self.up
    create_table :students do |t|
      t.string :name
      t.string :email
      t.integer :phone
      t.text :bio
      t.text :resume
      t.string :seeking_position
      t.integer :min_hourly
      t.integer :max_hourly
      t.integer :start_weeks
      t.string :pic_uid

      t.timestamps
    end
  end

  def self.down
    drop_table :students
  end
end

Ответы [ 3 ]

21 голосов
/ 08 марта 2011

Это довольно простой набор условий для вашего запроса.Вы также должны проверить searchlogic .Это потрясающе и освобождает вас от написания большого количества SQL.

Установите несколько переменных

position = "internship" 
min_hourly = 7
max_hourly = 18
start_weeks = 2..4

Затем напишите такой код:

Student.find(:all,
:conditions => ["seeking_position = ? AND min_hourly = ? AND max_hourly = ?
                AND start_weeks between ?",
                position, min_hourly, max_hourly, start_weeks])

В Rails3, вы можете использовать новую where() функцию

Student.where(:seeking_position => position,
              :min_hourly => min_hourly,
              :max_hourly => max_hourly,
              :start_weeks => start_weeks)
4 голосов
/ 08 марта 2011

Замените минимальные / максимальные часовые поля одним: часовым полем, поскольку все хотят, чтобы их максимальные значения были бесконечностью:

Student.where(:seeking_position => 'internship', :hourly => 7..10, :start_weeks => 2..4)
2 голосов
/ 08 марта 2011

В Rails 3 вы можете использовать что-то вроде этого:

Student.where(:seeking_position => 'internship')

для определения различных запросов.Вот скринкаст с более подробной информацией: http://railscasts.com/episodes/202-active-record-queries-in-rails-3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...