【问题标题】:Change status based on checkbox value rails根据复选框值轨道更改状态
【发布时间】:2018-12-06 14:30:08
【问题描述】:

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

<% 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

我正在更新状态,但我想用更好的选项来做,可以发送所有复选框状态还是只发送更改的复选框会更好,我很困惑选择更好的选项,任何建议

【问题讨论】:

    标签: ruby-on-rails checkbox


    【解决方案1】:

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

    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

    【讨论】:

    • 感谢您的回复,每次用户提交更改时发送所有复选框值是否很好,或者我是否必须处理已更改的 ID(0 到 1 和 1 到 0 ) 提交表单时
    • 如果您使用嵌套表单方法,您将不得不担心处理更改的 id。您实现的方式必须像您一样由 JS 处理,或者您可以创建一个表单并 POST 数据(然后您不必添加 JS)
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多