Ruby on rails 当用户取消选择所有选项时,未将存储值设置为nil-rails/simple\u表单

Ruby on rails 当用户取消选择所有选项时,未将存储值设置为nil-rails/simple\u表单,ruby-on-rails,ruby,simple-form,Ruby On Rails,Ruby,Simple Form,我有下面的表单输入,除了一个小的“bug”外,它正在工作 <%= f.input :secondary_role, :collection => UseridRole::VALUES, :include_blank => false,:label => "Secondary Role(s):", :input_html => { :class => " simple_form_bgcolour simple_form_position overide_sel

我有下面的表单输入,除了一个小的“bug”外,它正在工作

<%= f.input :secondary_role, :collection => UseridRole::VALUES, :include_blank => false,:label => "Secondary Role(s):", :input_html => {  :class => " simple_form_bgcolour simple_form_position overide_selection_field_width", :size => 4, multiple: true }, include_hidden: false, :hint => "Hold shift to select multiple roles" %>

我的问题是,在用户设置了次要角色的情况下,不能通过取消选择该选项来取消设置。在列表中取消选择并保存某个选项时,不会发生任何情况。只有选择其他选项才能删除上述主持人。如何在取消选择全部后使数组为空?

删除
include\u hidden:false
选项;隐藏字段用于自动执行此操作


(否则,您需要在接收表单提交的控制器操作中手动处理这种情况。)

正如@matthewd所指出的,解决方案是删除
include\u hidden:false
选项,尽管这引入了将空白数组项添加到我的角色数组的另一个问题

因此,我添加了以下方法,以在每次保存之前触发并删除任何空白数组项:

  def remove_blank_entry
    secondary_role = self.secondary_role
    if secondary_role.include? ""
      secondary_role.delete("")
    end
  end

啊-这个小片段给了我另一个问题-所以我可能必须在控制器中处理它,虽然我认为最好的做法是将任何逻辑放入模型中?数据逻辑属于模型,但这是一个通信/协作问题,这是控制器的领域:没有隐藏选项,没有任何直接的线索表明表单包含一个selectmultiple字段;如果控制员知道那里有一个(因此缺少一个值是很重要的),那么它的工作就是填补这个空白。这是有道理的。我正在使用的代码库似乎没有遵循这种做法。。。在我的另一篇文章中,我将下面的方法添加到了我的用户模型中,并且很容易使用模型中的现有回调调用(在保存之前)。如果这个方法按照您的建议存在于控制器中,您将如何调用它?很抱歉问了这么多问题!您可以使用
拒绝
方法来清理此问题:
次要角色。拒绝(&:blank?)
  def remove_blank_entry
    secondary_role = self.secondary_role
    if secondary_role.include? ""
      secondary_role.delete("")
    end
  end