首页 文章

Rails 4字段类型,用于具有预定义值的多选

提问于
浏览
2

下面是这种情况:我有一个Category模型,需要有一个属性,用户可以从3-4个预定义的值中选择多个项目(这意味着我只能添加更多,管理员不能,所以没有单独的模型那3-4个选项) .

枚举会很棒,但有了这个,只能选择一个选项 . 由于我使用Postgres,我正在考虑使用数组类型属性来存储选定的值 .

是否有更简单,更有效的方法来执行此操作或其他我不知道的字段类型?

更新(我选择做什么):

Migration (Postgres 9.3): add_column:categories,:settings,:string,array:true,default:'{}'

Controller: 已将 :settings => [] 添加到允许的参数中 .

View: <%= f.select :settings, %w[a b c], {}, :multiple => true %>

因此,如果我想获得设置'a'的所有类别,那么我做:

Category.where("'a' = ANY (settings)")

1 回答

  • 1

    我正在考虑使用数组类型属性来存储选定的值 .

    您可以serialize your field将值保存为数据库中的数组或哈希值 . 首先,您必须通过创建迁移在类别表中添加字段

    class some_migration
      def change
        add_column :categories, :some_field, :text
      end
    end
    

    在模型中告诉rails将其用作可序列化字段

    class Category < ActiveRecord::Base
      serialize :some_field, Array
    end
    
    #this will allow you to do something like this:
    category = Category.create(some_field: [some_value_1,some_value_2])
    Category.find(category.id).preferences # => [some_value_1, some_value_2]
    

相关问题