在Rails 4中基于db填充复选框

时间:2016-05-25 20:18:27

标签: ruby-on-rails forms ruby-on-rails-4 checkbox populate

我正在使用此对帐系统,用户可以在其中选择导入记录时要使用的字段。我终于让选择预先填充了正确的信息,但不能在我的生活中获得复选框来做同样的事情。这是我的表格:

    #views/match_rule/edit.html.erb

    <%= form_for(@match_rules) do |f| %>
    <%= f.label :name, "Name" %>
    <%= f.text_field :name, placeholder: "Rule Set Name" %>
    <%= f.label :algorithm, "Choose an algorithm" %>
    <%= f.select :algorithm, build_algorithm_select_options %>
    <%= f.label :match_fields, "Available fields" %>
    <% @field_options.each do |field| %>
      <%= f.check_box :match_fields %>
      <%= f.label :match_fields, "#{field.last}" %><br/>
    <% end %>
    <%= f.submit "Save", class: "button primary" %>
    <%= link_to "Cancel", match_rule_index_path, class: "button" %>
  <% end %>

目前相应的控制器只是构建字段的哈希值,以免混淆代码使视图混乱

  #controllers/match_rule_controller.rb

  def edit
    @field_options = {
      name: "Name",
      email: "Email",
      phone: "Phone Number",
      gender: "Gender",
      marital_status: "Marital Status",
      dob: "Date of Birth",
      campus: "Campus",
      address: "Street Address",
      city: "City",
      state: "State",
      zip: "Zip"
    }
  end

我的模型正在序列化字段

#models/match_rule.rb

class MatchRule < ActiveRecord::Base
  has_many :inboxes
  enum algorithm: [ :adjustable, :classic_minimal, :classic_standard ]
  serialize :match_fields
end

我的数据库字段存储了应填充match_fields列中复选框的所有选项 screenshot of the db structure

如果有必要了解我如何使用数组播种数据库,那么:

#db/seeds.rb

classic_minimal = MatchRule.create(algorithm: 'classic_minimal', match_fields: ['name', 'email', 'phone', 'gender', 'zip'], name: 'Classic Minimal')
classic_standard = MatchRule.create(algorithm: 'classic_standard', match_fields: ['name', 'email', 'phone', 'gender', 'marital_status', 'dob', 'campus', 'address', 'city', 'state', 'zip'], name: 'Classic Standard')
adjustable = MatchRule.create(algorithm: 'adjustable', match_fields: ['name', 'phone', 'campus', 'marital_status', 'zip'], name: 'Adjustable')

我在这里检查了类似的问题,最接近帮助我取得突破的是这个问题的答案:Set checkboxes on edit method in Rails 4他说要使用.include?确定检查状态,但我不确定我会在params中放入什么,因为我需要解析match_fields中每个字段的哈希值,这样会非常粗糙。

非常感谢任何建议或指导,谢谢!

更新 更新!尝试使用fields_for但仍未发布或填充。

<%= f.label :match_fields, "Available fields" %>
<%= fields_for :match_fields do |field| %>
<%= field.check_box :name %>
<%= field.label :name, "Name" %><br/>
<%= field.check_box :email %>
<%= field.label :email, "Email" %><br/>
<%= field.check_box :phone %>
<%= field.label :phone, "Phone" %><br/>
<% end %>

现在当我在控制台中检查更新时的params时,它说:

  "match_fields" => {
 "name" => "1",
"email" => "1",
"phone" => "0"
},

但实际上没有张贴或填充。

1 个答案:

答案 0 :(得分:0)

想出来。

href

你必须通过.include?选项哈希中的方法。现在我只需要找到一种更清晰的方法将它放在视图中。