设计管理员用户批准设置

时间:2016-07-17 21:29:08

标签: ruby-on-rails devise

似乎位于here的教程有一些遗漏:

  1. 在创建管理员可访问控制器方法时,他们不指定要使用哪个自定义设计控制器,或者从哪个基本控制器继承。所以我把我的代码放在了PagesController中:

    class PagesController < ApplicationController
     def approve_users
      if current_user.admin?
       if params[:approved] == "false"
        @users = User.find_by_approved(false)
       else
        @users = User.all
       end
      end
     end
    end
    
  2. 只要您选择向NoMethodError in Pages@approve_users用户显示undefined method 'each' for User,就可以在所有用户和所有未批准用户之间切换的视图代码会生成:approved => false@users = User.all。我知道为什么noMethodErrors会在app开发中出现,并且通常能够解决为什么我会收到此错误。 在<{1}}时工作,但在@users = User.find_by_approved(false)

    时则不行
    <% if current_user.admin? %>
     <h2>Users</h2>
     <%= link_to "All Users", :action => "approve_users" %> | <%= link_to "Users awaiting approval", :action => "approve_users", :approved => "false" %>
     <div class="ui form">
      <table>
       <thead>
        <tr scope="col">
         <th>First name</th>
         <th>Last name</th>
         <th>E-mail</th>
         <th>Approve</th>
        </tr>
       </thead>
       <% @users.each do |user| %>
        <tbody>
         <tr>
          <td><%= user.firstname %></td>
          <td><%= user.lastname %></td>
          <td><%= user.email %></td>
          <td class="ui checkbox">
           <input type="checkbox" tabindex="0" class="hidden">
          </td>
         </tr>
        </tbody>
       <% end %>
      </table>
     </div>
    <% end %>
    
    1. 维基说它提供了一种批准用户的简单方法,但他们的视图代码实际上只是提供了一种简单的方法来列出所有用户。我假设我需要使用表单助手。

1 个答案:

答案 0 :(得分:0)

  1. 我专门为管理控制面板制作了一个自定义管理控制器,并将所有工具放在索引页面中。不过,你可以通过多种方式做到这一点。

  2. 对此的共识似乎是,如果将@users = User.find_by_approved(false)切换为@users = User.where(已批准:false),则效果会更好。这就是我现在所拥有的,而且效果非常好。

  3. 我也有这个问题,我最终废弃了设计并制作了自定义用户登录方法。但是,您应该能够使其工作。我按照教程here进行了操作,这非常有帮助。基本上,您要创建一个方法来批准管理控制器中的用户。这是我使用的那个:

  4. `

    def approve
    User.where(id: params[:user_id]).update_all(approved: true)
    
      redirect_to admin_index_path
    end
    

    从那里,您可以为路线添加put方法。

    put 'approve_admin', to: "admin#approve", as: :approve_admin
    

    最后,将您的用户列表包装在表单标记中,并添加要作为哈希更新的所有用户ID的哈希值。

    <%= form_tag(approve_admin_path, method: :put) do %>
       <% for user in @unapproved_users %>
         <tr>
           <td class="mdl-data-table__cell--non-numeric"><%= check_box_tag "user_id[]", user.id %></td>
           <td><%= user.name %></td>
           <td><%= user.email %></td>
           </tr>
           <% end %>
          </tbody>
          </table>
          <%= submit_tag "Mark as approved", class: 'mdl-button mdl-js-button mdl-button--raised approve' %>
       <% end %>
    

    我创建了一个批准用户的方法和另一个用于取消批准用户的方法,因此我切换了@ users.each迭代,转而使用for迭代。我将@unapproved_users添加到我的索引方法中以使其正常工作。希望这对你有用!