복붙노트

[RUBY-ON-RAILS] 레일 3 루비 어떻게 만드는 'OR'조건

RUBY-ON-RAILS

레일 3 루비 어떻게 만드는 'OR'조건

나는 검사의 경우 하나의 조건을 만족한다는 SQL 문이 필요합니다 :

SELECT * FROM my_table WHERE my_table.x=1 OR my_table.y=1

나는이 길을 '3 레일'하고 싶어. 내가 좋아하는 뭔가를 찾고 있었다 :

Account.where(:id => 1).or.where(:id => 2)

나는 항상 대체 SQL 또는 조건 문자열을 수 있다는 것을 알고. 범위를 결합 할 때하지만, 내 경험이 종종 혼란으로 이어집니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

또 다른 관련 질문은 OR 조건에 따라 관계를 설명 할 수있는 방법입니다. 유일한 방법은 내가 발견

has_many :my_thing, :class_name => "MyTable",  :finder_sql => 'SELECT my_tables.* ' + 'FROM my_tables ' +
'WHERE my_tables.payer_id = #{id} OR my_tables.payee_id = #{id}'

그러나 이러한 다시 나누기 조합으로 사용하는 경우. 이를 지정하는 더 좋은 방법이 있나요?

해결법

  1. ==============================

    1.안타깝게도 불러야은 아직 구현되지 않은 (하지만이 경우, 그것은 굉장 수 있습니다).

    안타깝게도 불러야은 아직 구현되지 않은 (하지만이 경우, 그것은 굉장 수 있습니다).

    당신은 같은 것을해야 할 것이다 그래서 :

    class Project < ActiveRecord::Base
      scope :sufficient_data, :conditions=>['ratio_story_completion != 0 OR ratio_differential != 0']
      scope :profitable, :conditions=>['profit > 0']
    

    그런 식으로 당신은 여전히 ​​굉장하고 수행 할 수 있습니다

    Project.sufficient_data.profitable
    
  2. ==============================

    2.Account.where (ID : [1,2])가 필요 없음 설명.

    Account.where (ID : [1,2])가 필요 없음 설명.

  3. ==============================

    3.레일 5이 의지의 작품, 레일 마스터를 참조하십시오

    레일 5이 의지의 작품, 레일 마스터를 참조하십시오

    Post.where('id = 1').or(Post.where('id = 2'))
    # => SELECT * FROM posts WHERE (id = 1) OR (id = 2)
    

    3.0.4+ 레일 :

    accounts = Account.arel_table
    Account.where(accounts[:id].eq(1).or(accounts[:id].eq(2)))
    
  4. ==============================

    4.그 arel 쿼리 나에게 읽을 수 있습니다.

    그 arel 쿼리 나에게 읽을 수 있습니다.

    는 SQL 문자열 잘못은 무엇입니까? 사실, 레일 가이드 쿼리의 조건을 만들 수있는 첫 번째 방법으로이 방법을 노출 : http://guides.rubyonrails.org/active_record_querying.html#array-conditions

    그래서, 나는 "레일 방식"으로 그것을 할 수있는이 방법을 내기 :

    Account.where("id = 1 OR id = 2")
    

    내 소견, 그것은 짧고 명확합니다.

  5. ==============================

    5.나는 IN 절, 예컨대에 가고 싶어 :

    나는 IN 절, 예컨대에 가고 싶어 :

    Account.where(["id in (?)", [1, 2]])
    
  6. ==============================

    6.나는 Squeel 보석 (https://github.com/ernie/squeel/) 할 OR 쿼리를 사용했습니다 그것은 아름답게 작동합니다.

    나는 Squeel 보석 (https://github.com/ernie/squeel/) 할 OR 쿼리를 사용했습니다 그것은 아름답게 작동합니다.

    그것은 당신이 Account.where 같은 쿼리 {(ID == 1)을 작성할 수 있습니다 | (ID == 2)}

  7. ==============================

    7.조건 해시 : 당신은의 값으로 배열을 정의 할 수 있습니다.

    조건 해시 : 당신은의 값으로 배열을 정의 할 수 있습니다.

    당신은 예를 들어 할 수 있도록 :

    Account.all(:conditions => { :id => [1, 2] })
    

    레일 테스트 3.1.0

  8. ==============================

    8.해시를 사용하여 대체 구문

    해시를 사용하여 대체 구문

    Account.where("id = :val1 OR id = :val2", val1: 1, val2: 2).
    

    값이 다중 컬럼과 비교 할 때, 특히 유용하다. 예를 들면 :

    User.where("first_name = :name OR last_name = :name", name: 'tom')
    
  9. ==============================

    9.rails_or으로, 당신은 그것을 같이 할 수 :

    rails_or으로, 당신은 그것을 같이 할 수 :

    Account.where(id: 1).or(id: 2)
    

    (너무, 레일 4와 5에서 작동합니다.)

  10. from https://stackoverflow.com/questions/3291152/ruby-on-rails-3-howto-make-or-condition by cc-by-sa and MIT license