我有一个这样写的迁移文件:
class Character < ActiveRecord::Migration
def change
create_table :character_attributes do |t|
t.string :character_name
t.boolean :attr1, default: false, null: false
t.boolean :attr2, default: false, null: false
t.boolean :attr3, default: false, null: false
t.boolean :attr4, default: false, null: false
t.boolean :attr5, default: false, null: false
t.boolean :attr6, default: false, null: false
t.boolean :attr7, default: false, null: false
t.timestamps null: false
end
end
end
基本上,每个角色有7个可能的属性,但只能有一个(换句话说,如果七个字段中的一个为真,则其余为假)。
来自模型的其他讨论(即Rails 4.x how to query boolean value with activerecord?)查询。 但是你可以这样编写代码,以便rails通过对象中的多个字段/属性进行查询吗?即。
Character.find_by_character_name("Jack").where(:attributes => true)
另外,我知道重新设计架构可以是一个选项,但是现在我只想知道查询是否可以完成。
答案 0 :(得分:0)
您可以使用OR
。
def attributes(value)
v = value ? 1 : 0
<<-EOS
attr1 = #{v} OR
attr2 = #{v} OR
attr3 = #{v} OR
attr4 = #{v} OR
attr5 = #{v} OR
attr6 = #{v} OR
attr7 = #{v}
EOS
end
Character.find_by_character_name("Jack").where(attributes(true))
这可以更加紧凑,动态,并且还可以移动到模型上的类方法。但我认为这会给你一个想法。