【问题标题】:Checkbox to toggle admin in rails在 Rails 中切换管理员的复选框
【发布时间】:2018-06-13 15:17:25
【问题描述】:

我有一个父表,其中有 admin 和 superadmin 字段。超级管理员可以将其他父母分配为管理员或超级管理员。我希望在父母列表前面有一个复选框,显示如果选中任何复选框,则表明特定父级是管理员或超级管理员,如果未选中任何复选框,则表明特定父级既不是管理员也不是超级管理员。超级管理员如何分配或删除只需取消选中复选框即可将任何特定的父级作为管理员或超级管理员。请帮忙

更新

<td><%= check_box_tag 'admin', true, parent.admin, :onclick => 'this.form.submit()'  %></td>
<td><%= check_box_tag 'superadmin', true, parent.superadmin, :onclick => 'this.form.submit()'  %></td>

如何取消选中管理员或超级管理员,并且该父级分别被删除为管理员或超级管理员。

更新

【问题讨论】:

  • 到目前为止你尝试过什么?你能分享一下你卡在哪里了吗?
  • @Sinstein 。我无法弄清楚如何选中或取消选中 admin 和 superadmin 字段,以便这些字段的布尔值在数据库中发生变化。
  • @Sinstein 请检查上面的更新。如何取消选中删除或检查分配,以便数据库中管理员或超级管理员的布尔值发生变化。

标签: javascript ruby-on-rails ruby ajax ruby-on-rails-5


【解决方案1】:

一种方法可以是这样的:

  • check_box 字段更改为

    <%= check_box_tag 'admin', true,  parent.admin, class: 'status', data: {id: parent.id, type: 'admin'} %>
    <%= check_box_tag 'superadmin', true, parent.superadmin, class: 'status', data {id: parent.id, type: 'superadmin' }%>
  • 添加这个 javascript

    $(".status").on('change', function(){
        var $this = $(this) 
        var parent_id = $this.data('id'); 
        $.ajax({
          url: 'status/parent/' + parent_id,
          type: 'POST',
          data: {type: $this.data('type'), value: this.checked }
        });
      });
  • 添加到ParentsController

    def change_status
       @parent = Parent.find(params[:id])
    if @parent.update_attributes(params[:type] => params[:value]) redirect_to parents_path end end
  • 这是routes.rb文件

    post 'status/parent/:id' =&gt; 'parents#change_status'

在控制器中,路径中的:idparams[:id] 结尾。来自 ajax 请求的数据也以 params 散列结束,因此是 params[:type]params[:value]

【讨论】:

    【解决方案2】:
    <%= form_tag update_status_path, :method => 'patch' do %>
     <tbody>
      <% @parents.each do |parent| %>
       <tr> 
        <td><%= link_to parent.email,parent_path(parent) %></td>
         <td><%= check_box_tag "parents[#{parent.id}][admin]", true, parent.admin, class: 'status', data: {id: parent.id, type: 'admin'} %></td>
         <td><%= check_box_tag "parents[#{parent.id}][superadmin]", true, parent.superadmin, class: 'status', data: {id: parent.id, type: 'superadmin'} %></td>
       </tr>
      <% end %>
     </tbody>
    

    parents_controller.rb

    def manage_users
        @parents = Parent.search(params[:search]).order(params[:sort]).admins
        @parents_to_update = []
    end
    

    routes.rb

    get 'main-admin/manage-users', to: 'parents#manage_users'
    

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多