[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.안타깝게도 불러야은 아직 구현되지 않은 (하지만이 경우, 그것은 굉장 수 있습니다).
안타깝게도 불러야은 아직 구현되지 않은 (하지만이 경우, 그것은 굉장 수 있습니다).
당신은 같은 것을해야 할 것이다 그래서 :
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.Account.where (ID : [1,2])가 필요 없음 설명.
Account.where (ID : [1,2])가 필요 없음 설명.
-
==============================
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.그 arel 쿼리 나에게 읽을 수 있습니다.
그 arel 쿼리 나에게 읽을 수 있습니다.
는 SQL 문자열 잘못은 무엇입니까? 사실, 레일 가이드 쿼리의 조건을 만들 수있는 첫 번째 방법으로이 방법을 노출 : http://guides.rubyonrails.org/active_record_querying.html#array-conditions
그래서, 나는 "레일 방식"으로 그것을 할 수있는이 방법을 내기 :
Account.where("id = 1 OR id = 2")
내 소견, 그것은 짧고 명확합니다.
-
==============================
5.나는 IN 절, 예컨대에 가고 싶어 :
나는 IN 절, 예컨대에 가고 싶어 :
Account.where(["id in (?)", [1, 2]])
-
==============================
6.나는 Squeel 보석 (https://github.com/ernie/squeel/) 할 OR 쿼리를 사용했습니다 그것은 아름답게 작동합니다.
나는 Squeel 보석 (https://github.com/ernie/squeel/) 할 OR 쿼리를 사용했습니다 그것은 아름답게 작동합니다.
그것은 당신이 Account.where 같은 쿼리 {(ID == 1)을 작성할 수 있습니다 | (ID == 2)}
-
==============================
7.조건 해시 : 당신은의 값으로 배열을 정의 할 수 있습니다.
조건 해시 : 당신은의 값으로 배열을 정의 할 수 있습니다.
당신은 예를 들어 할 수 있도록 :
Account.all(:conditions => { :id => [1, 2] })
레일 테스트 3.1.0
-
==============================
8.해시를 사용하여 대체 구문
해시를 사용하여 대체 구문
Account.where("id = :val1 OR id = :val2", val1: 1, val2: 2).
값이 다중 컬럼과 비교 할 때, 특히 유용하다. 예를 들면 :
User.where("first_name = :name OR last_name = :name", name: 'tom')
-
==============================
9.rails_or으로, 당신은 그것을 같이 할 수 :
rails_or으로, 당신은 그것을 같이 할 수 :
Account.where(id: 1).or(id: 2)
(너무, 레일 4와 5에서 작동합니다.)
from https://stackoverflow.com/questions/3291152/ruby-on-rails-3-howto-make-or-condition by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 왜 RSpec에는 "장애 / 오류 : 역 추적에서 일치하는 라인을 찾을 수 없습니다"라는입니까? (0) | 2020.03.03 |
---|---|
[RUBY-ON-RAILS] 왜 respond_with는 자신의 보석에 레일 4.2에서 제거되고? (0) | 2020.03.03 |
[RUBY-ON-RAILS] 레일에 jQuery를 포스트 (0) | 2020.03.02 |
[RUBY-ON-RAILS] 어떻게 한 도메인에서 다른 도메인으로 리디렉션하는 레일 경로를 사용할 수 있습니까? (0) | 2020.03.02 |
[RUBY-ON-RAILS] 초기화되지 않은 상수의 MysqlCompat : (mms2r 보석을 사용하여) MysqlRes (0) | 2020.03.02 |