動作するはずだと思う使用している場合:Relation.where(part: ['v03', 'v04']).uniq.pluck(:car)
ここだし完全な例:
の
require 'active_record'
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
ActiveRecord::Schema.define do
self.verbose = false
create_table :relations do |t|
t.string :part
t.string :car
end
end
Relation = Class.new ActiveRecord::Base
# build the relations (btw, this name makes no sense)
Relation.create! car: 'f01', part: 'v03'
Relation.create! car: 'f03', part: 'v03'
Relation.create! car: 'f03', part: 'v04'
Relation.create! car: 'f04', part: 'v04'
# querying
Relation.where(part: "v04").pluck(:car) # => ["f03", "f04"]
Relation.where(part: "v03").pluck(:car) # => ["f01", "f03"]
Relation.where(part: ['v03', 'v04']).uniq.pluck(:car) # => ["f01", "f03", "f04"]
いくつかの考え:あなたがそれらをインスタンス変数(例えばようにしたい場合を除き
はあなたの変数の前にasperandsを入れないでください@a
は明らかにa
である必要があります - そして、さらに良い名前が良いでしょう。私はおそらく上記のようにそれをすべて取り除くだろう)。それはむしろ、データベースに一意性を移動するためSELECT car FROM "relations" WHERE "relations"."part" = 'v04'
ActiveRecordの上.uniq
を使用することをお勧めしSELECT "relations".* FROM "relations" WHERE "relations"."part" = 'v04'
対::関連:摘むだけで、関連するデータを選択するので
マップよりも摘むを使用することをお勧めしますRubyでメモリ内でそれをしようとするよりも:SELECT DISTINCT car FROM "relations" WHERE "relations"."part" IN ('v03', 'v04')
問題はありますか? –
あなたはRailsを使用していると思いますか? –