ActiveRecord ИЛИ запрос - PullRequest
       75

ActiveRecord ИЛИ запрос

174 голосов
/ 04 сентября 2010

Как вы делаете запрос OR в Rails 3 ActiveRecord. Все примеры, которые я нахожу, имеют только запросы AND.

Редактировать: ИЛИ метод доступен начиная с Rails 5. См. ActiveRecord :: QueryMethods

Ответы [ 13 ]

3 голосов
/ 14 марта 2015

С рельсами + арель, более понятный способ:

# Table name: messages
#
# sender_id:    integer
# recipient_id: integer
# content:      text

class Message < ActiveRecord::Base
  scope :by_participant, ->(user_id) do
    left  = arel_table[:sender_id].eq(user_id)
    right = arel_table[:recipient_id].eq(user_id)

    where(Arel::Nodes::Or.new(left, right))
  end
end

Производит:

$ Message.by_participant(User.first.id).to_sql 
=> SELECT `messages`.* 
     FROM `messages` 
    WHERE `messages`.`sender_id` = 1 
       OR `messages`.`recipient_id` = 1
3 голосов
/ 26 января 2012

Я только что извлек этот плагин из клиентской работы, который позволяет комбинировать области действия с .or., напр. Post.published.or.authored_by(current_user). Squeel (более новая реализация MetaSearch) также хорош, но не позволяет вам выполнять операции ИЛИ, поэтому логика запросов может стать немного избыточной.

0 голосов
/ 08 октября 2015
Book.where.any_of(Book.where(:author => 'Poe'), Book.where(:author => 'Hemingway')
...