我跟随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;错误。或者在编辑表单时找到另一种方法来保持选中正确的复选框值。
任何建议都会有所帮助,谢谢!
答案 0 :(得分:1)
由于Userprofile#interest
是一个数组,看起来您确实希望在助手中使用include?
而不是match
。所以在userprofiles_helper.rb中:
def checked?(area)
@userprofile.interest.present? && @userprofile.interest.include?(area)
end