2017-10-23 3 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

예를 들어 설명 할 수 있습니다. "목록에 장난감을 추가하고 지정하지 않아도 true로 표시된 것을 찾을 수 있도록 쿼리에서 열 이름을 사용하고 싶지 않습니다. 마다." – 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