2017-10-23 4 views
0
class Child 
    has_many :toys 
end 


class Toys 
    belongs_to :child 
end 

class CreateToys < ActiveRecord::Migration[5.1] 
def change 
    create_table :toys do |t| 
    t.integer :child_id 
    t.boolean :marbles, default: false 
    t.boolean :blocks, default: false 
    t.boolean :jacks, default: false 
    t.boolean :dolls, default: false 
    t.timestamps 
    end 
end 
end 

child = Child.first 
child.toys.create(marbles=true, blocks=true, jacks=false, dolls=false) 

子供が持っているおもちゃを返すクエリを実行するにはどうすればよいですか?
私は、リストにおもちゃを追加することができ、それぞれを指定する必要なしにtrueとマークされたものを見つけることができるように、クエリの列名を使用する必要はありません。値で列を見つける

+0

この例では、「私はクエリに列名を使用する必要がないため、リストにおもちゃを追加して、指定することなく真とマークすることができます各。" – Gabbar

+0

私はこのデータモデルが非常に意味をなさないとは思いません。あなたは新しいおもちゃの種類が非常に良いではないと思うたびにテーブルに列を追加する必要があります。何が問題なのですか?文字列 'toy_type'を持っていますか? – mp94

答えて

0
toy_attributes = Toy.new.attributes.keys.select do 
    |key| key != 'created_at' && key != 'updated_at' 
end 
params = toy_attributes.reduce({}) do 
    |params, attr| params[attr] = true; params 
end 
toys = params.flat_map do 
    |attribute, value| child.toys.where({attribute => value}) 
end 
関連する問題