Rails - 使用布尔值查询多个字段

时间:2015-09-18 02:50:03

标签: ruby-on-rails rails-migrations ruby-on-rails-4.2 querying sqlite3-ruby

我有一个这样写的迁移文件:

 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) 

另外,我知道重新设计架构可以是一个选项,但是现在我只想知道查询是否可以完成。

1 个答案:

答案 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))

这可以更加紧凑,动态,并且还可以移动到模型上的类方法。但我认为这会给你一个想法。