1つの条件が満たされているかどうかを確認するSQLステートメントが必要です。
SELECT * FROM my_table WHERE my_table.x=1 OR my_table.y=1
これを「Rails 3」の方法で行いたいです。私は次のようなものを探していました:
Account.where(:id => 1).or.where(:id => 2)
私はいつでもsqlまたは条件文字列にフォールバックできることを知っています。しかし、私の経験では、これはスコープを組み合わせるときにしばしば混乱をもたらします。これを行う最良の方法は何ですか?
もう1つの関連する質問は、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}'
ただし、これらを組み合わせて使用すると再び壊れます。 ISこれを指定するより良い方法はありますか?
悲しいことに、.orはまだ実装されていません(ただし、実装されている場合は素晴らしいです)。
したがって、次のようなことをする必要があります。
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
Account.where(id: [1,2])
説明は不要です。
これはRails 5、 Rails master を参照してください:
Post.where('id = 1').or(Post.where('id = 2'))
# => SELECT * FROM posts WHERE (id = 1) OR (id = 2)
Rails 3.0.4+:
accounts = Account.arel_table
Account.where(accounts[:id].eq(1).or(accounts[:id].eq(2)))
これらのarelクエリは私には判読できません。
SQL文字列の何が問題になっていますか?実際、Railsガイドは、クエリで条件を作成する最初の方法としてこの方法を公開しています。 http://guides.rubyonrails.org/active_record_querying.html#array-conditions
だから、私はこの方法で「レールの方法」としてそれをすることに賭けます:
Account.where("id = 1 OR id = 2")
私の謙虚な意見では、それは短くて明確です。
IN
句を使用します。例:
Account.where(["id in (?)", [1, 2]])
Squeel gem( https://github.com/ernie/squeel/ )を使用してORクエリを実行しました。
クエリをAccount.where{(id == 1) | (id == 2)}
として記述できます
:conditions
ハッシュの値として配列を定義できます。
たとえば、次のことができます。
Account.all(:conditions => { :id => [1, 2] })
Rails 3.1.0でテスト済み
ハッシュを使用した代替構文
Account.where("id = :val1 OR id = :val2", val1: 1, val2: 2).
これは、値が複数の列と比較される場合に特に役立ちます。例えば:
User.where("first_name = :name OR last_name = :name", name: 'tom')