Rails与enum(哈希)的复选框一起形成

时间:2017-10-19 14:24:23

标签: ruby-on-rails postgresql

如何在散列form_for的{​​{1}}中创建复选框:

enum

我试着像:

class UserProfile < ApplicationRecord
  enum locations: { Kursenai: 0, Papiskes: 1, Versiai: 2 }

但这在许多方面都失败了,例如。我以为我可以从循环中抓取<div class="field"> <% UserProfile.locations.map { |k, v| }.each do |key, val| %> <%= f.label key %><br /> <%= f.check_box :locations, {:multiple => true}, val, nil %> <% end %> </div> 并将其设置为标签的值..我的Postgres有:

key

我也允许t.integer "locations", array: true 使用强大的参数:

locations

是否应该在db中保存数组?

请同时提出建议 - 现在..permit(:locations) 被放置在一个模型中,但我也会在其他类中使用它,所以我应该将它创建为enum还是仅仅作为一个简单的类?

提前致谢

编辑:

我在控制台做:

concern

我得到了:

p = { Kursenai: 0, Papiskes: 1, Versiai: 2 }
p.map{|k,v| [k, v]}.each do |key, val| puts key, val

在模板中,第一个复选框显示时没有复选框(只是标签),而最后一个没有标签。唔...

1 个答案:

答案 0 :(得分:2)

你有一个不必要的map调用..哈希已经产生了[key,value]对,同时枚举了其中的元素,所以你应该能够做到这一点:

<% UserProfile.locations.each do |key, val| %>
  ...
<% end %>

此外,您似乎尝试使用enum列同时存储多个值,但是,我相信enum列帮助器设计为围绕奇异值的包装器,因此表格字段应该是单选按钮或select菜单,而不是复选框。