我的应用程序有一个技能列表可供选择。当你点击“保存”时,用户id和技能id会被记录在数据库中。

如果用户再次访问此页面,则会关闭所有复选框。
如何从数据库中进行检查,以使选中的复选框始终包含在视图中?
我的观点是:
= form_for(:skill_list, url: user_skill_list_index_path) do |f|
%li
= f.check_box(:a1, class: 'm-enabled')
= f.label(:a1, 'Programming')
%li
= f.check_box(:a2, class: 'm-enabled')
= f.label(:a2, 'Communication')
%li
= f.check_box(:a3, class: 'm-enabled')
= f.label(:a3, 'Problem-solving')
%li
= f.check_box(:a4, class: 'm-enabled')
= f.label(:a4, 'Teamwork')
%li
= f.check_box(:a5, class: 'm-enabled')
= f.label(:a5, 'Creative')
%li
= f.check_box(:a6, class: 'm-enabled')
= f.label(:a6, 'Marketing')我的控制器:
def create
@skill_record = UserSkillList.where(user_id: current_user.id).first
skill_params = params[:skill_list]
skills = []
skill_params.each do |k, v|
if v == '1'
id = k.dup
id.slice!(0).to_i
skills << id
end
end
if @skill_record.blank?
UserSkillList.create(user_id: current_user.id, skill_id: skills)
else
@skill_record.update_attributes(skill_id: skills)
end
redirect_to :back
end我的数据库记录:

发布于 2019-09-23 18:39:16
它接受2个参数checked和unchecked值
例如,如果a1,a2,..是boolean字段,那么它应该是
= f.check_box :a1, {class: 'm-enabled'}, true, false例如,如果a1,a2,..是任何string字段,那么它应该是
= f.check_box :a1, {class: 'm-enabled'}, "value-for-checked", "value-for-unchecked" 发布于 2019-09-26 00:39:30
对每个技能(编程、通信等)使用UserSkillList表中的布尔值字段将会解决你的问题。在这种情况下,您将拥有一个可以引用这些布尔表列的form_for skillset对象。
然后这就可以工作了
= f.check_box(:programming, class: 'm-enabled')如果你真的想要一个“技能列表”在数据库中,使用一个带有布尔值的散列,而不是一个数组。即{编程:真,通信:假等}。使用'text‘作为类型。
连接你的“序列号”和技能名称的唯一逻辑是创建技能数组的循环。所以,如果你在任何地方都找不到引用,它就不是真正的序列号。
https://stackoverflow.com/questions/58060438
复制相似问题