Rails check_box_tag在页面加载后保持选中状态(如果选中)

时间:2016-05-26 20:31:07

标签: ruby-on-rails-3 checkbox

我跟随this guide跟踪rails中的多个复选框。我使用Rails 3约定,所以我仍然有attr_accessible而不是强参数。一切似乎工作正常,除了我得到这个错误:

  

未定义的方法`匹配' for []:Array

userprofile.rb型号:

class Userprofile < ActiveRecord::Base

  before_save do
    self.expertise.gsub!(/[\[\]\"]/, "") if attribute_present?("interest")
  end

  attr_accessible :interest, :user_id, :country, :state_prov, :city
  serialize :interest, Array

userprofiles_helper.rb:

module UserprofilesHelper
  def checked(area)
      @userprofile.interest.nil? ? false :      @userprofile.interest.match(area)
  end
end

_form.html.erb:

<h3>Area of Interest</h3>

  <%= label_tag 'interest_physics', 'Physics' %>
  <%= check_box_tag 'userprofile[interest][]', 'Physics', checked("Physics"), id: 'interest_physics' %>

  <%= label_tag 'expertise_maths', 'Maths' %>
  <%= check_box_tag 'userprofile[interest][]', 'Maths', checked("Maths"), id: 'interest_maths' %>

如果我删除了选中的辅助方法,则复选框值不会保留。我一直试图修复未定义的方法&#39;匹配&#39;错误。或者在编辑表单时找到另一种方法来保持选中正确的复选框值。

任何建议都会有所帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

由于Userprofile#interest是一个数组,看起来您确实希望在助手中使用include?而不是match。所以在userprofiles_helper.rb中:

  def checked?(area)
    @userprofile.interest.present? && @userprofile.interest.include?(area)
  end