根据复选框的值更改状态

时间:2018-06-27 16:01:05

标签: ruby-on-rails checkbox

我在页面中有多个复选框(用于记录状态),我需要在单击按钮时更新记录的状态

<% collection.each do |staff| %>
  <div class="col-sm-6 col-md-4 col-lg-3" id="staff-<%= role.id %>">
 <input class="filled-in chk-col-indigo" type="checkbox" id="staffStatus- 
    <%=staff.id %>">
 <label class="labelValue" for="staffStatus-<%= staff.id %>">
<% end%>

点击“提交”按钮后,我仅根据选中状态选中所有复选框,

$(document).on 'click', '#StatusUpdateButton', ->
     inactive = []
     active = []
     $.each $(".staff__active:not(:checked)"), ->         
     inactive.push($(this).val())
     $.each $(".staff__active:checked"), ->
     active.push($(this).val())

在控制器中

def update_role_status
             Staff.where('id IN (?)', params[:active]).update_all(active: true)
             Staff.where('id IN (?)', params[:inactive]).update_all(active: false)
        end

我正在更新状态,但是我想用更好的选择来做到这一点,可以发送所有复选框状态还是可以只发送更改后的复选框,这是件好事,我很困惑采取更好的选择,任何建议

1 个答案:

答案 0 :(得分:0)

如果没有有关您的架构/模型的更多信息,该解决方案看起来还可以。我只是将逻辑移至模型:

class Staff
  # ...
  def self.activate_all(ids)
    where(id: ids).update_all(active: true)
  end

  def self.deactivate_all(ids)
    where(id: ids).update_all(active: true)
  end
end

# controller
Staff.activate_all(params[:active])
Staff.deactivate_all(params[: inactive])

另一种选择是使用嵌套形式:https://coderwall.com/p/qwx3qa/nested-form-and-rails-4