3

我从 Rails 开始,并创建了一个应用程序。在这个应用程序中,管理员是唯一可以创建用户的人,当他注册其他用户时,他可以选中一个复选框以选择他是创建用户还是管理员,因为在我的表用户中,我创建了一个布尔值。他有一个页面,他可以在其中看到不同用户的选项卡。在此页面中,我想在我的选项卡中添加一个复选框,管理员可以为其他用户添加或删除管理员。

但我不知道如何创建它:>

这是我的控制器代码:

class RegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_user!, :redirect_unless_admin, :except => [:edit]
  prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]



def create
  @user = User.create
    build_resource
    respond_to do |format|
      format.html {redirect_to :controller => 'users', :action => 'index'}
      format.js
    end
    if resource.save
      redirect_to users_index_path
       flash[:succes] = "Utilisateur cree"
    else
      clean_up_passwords resource
      respond_with resource
      flash[:avertissement] = "Veuillez remplir tout les champs."

    end
  end


def new
  @user = User.new

end

这是我的 index.html.erb 代码:

 <% btn_section = image_tag('btn-section.png') %>
   <% btn_admin = image_tag('checkmark.png') %>
   <% btn_noadmin = image_tag('close.png') %>
  <% btn_eye = image_tag('eye.png') %>
      <% btn_edit = image_tag('pencil.png')%>
      <% btn_remove = image_tag ('remove.png') %>
  <div class="section-admin">
<h1>Users</h1>

 <div class="btn-section-size"> <%= link_to 'Nouvelle Utilisateur', new_user_registration_path ,:class => "btn btn-primary submit-deco"%></div>

                <table class="user-index">

                            <colgroup>
                              <col class="size-Email">
                              <col class="size-admin"
                              <col class="size-action">
                            </colgroup>
                            <thead> <!-- En-tête du tableau -->
                              <tr>
                                  <th>Email</th>
                                  <th>Admin</th>
                                  <th width = "70 px">Actions</th>
                              </tr>
                            </thead>
                            <% @users.each do |user| %>
                            <tbody>
                            <!-- Boucle pour afficher les articles dans le tableau de chaque section -->
                              <tr>
                                  <td><%= user.email %> </td>
                                  <%= simple_form_for(resource_name, :remote => true, :as => resource, :url => user_registration_path()) do |f| %>
                                  <td><%= f.check_box (:admin), :id => "IsAdminSelect" %>

                                    <%#if user.admin? %>
                                    <%#= btn_admin %>
                                    <%# else %>
                                    <%#= btn_noadmin %>
                                    <%#end %><% end %></td>

                                  <td class="actiontab"> <%#= link_to btn_edit, edit_user_registration_path(user) %>
                  <%= link_to t('.destroy', :default =>(btn_remove)),user_registration_path(:id => user.id),
                                  :method => :delete,
                                    :data => { :confirm => t('.confirm', :default => t("helpers.link.confirm", :default => 'Etes vous certains ?')) } %></td>
                                </tr>

<% end %>
                            </tbody>

                          </table>

</div>

和我的注册新代码:

<div class="section-index">
<h2 class="title-edit-new">Inscription</h2>

<%= simple_form_for(resource_name, :as => resource, :url => user_registration_path()) do |f| %>
<%= f.error_notification %>
<ul class="form">
  <div class="inputs">
   <li> <%= f.label :email %></li>
   <li><%= f.email_field :email, :required => true, :class =>'email-input', :autofocus => true %></li>
   <li> <%= f.label :password %></li>
    <li><%= f.password_field :password, :class =>'password-input', :required => true %></li>
    <li class="passwordconfirm"> <%= f.label :password_confirmation %></li>
  <li> <%= f.password_field :password_confirmation, :class =>'passwordconfirm-input', :required => true %></li>
  </div>
  <li>
  <%= f.label :admin%>
  <%= f.check_box (:admin) %></li>

  <div class="actions">
   <li> <%= f.button :submit, "Inscription", :class => 'btn btn-primary submit-input'%></li>
  </div>
<% end %>

</ul>
</div>

我希望你能帮助我。抱歉我的英语不好,如果您需要,我会留在这里添加更多信息。

编辑 1:

我像这样开始我的脚本

<script type="text/javascript">
$(document).ready(function(){

$(".admin_select").click(function(){


  alert("/users/"+$(this).data("user-id")+"/toggle(:admin)");
});

});

</script>

并像这样编辑我的索引视图

  <td><%= f.check_box :admin, :checked => user.admin?, :class => "admin_select",
                                                       :data => { :user_id => user.id } %>

现在我可以看到谁是管理员。所以我只需要在脚本中实现 toggle(:admin) 。

编辑 2:

我的 routes.rb 文件

Redmine::Application.routes.draw do
  get "users/index"

root to: "sections#show", :id => '29', :division_id => '5'

resources :users do

  member do
    put :toggle_admin
  end
end


resources :dashboard
 resources :divisions do
  resources :sections do
    resources :articles
    end
  end

devise_for :users, :path_names => { :sign_in => "login"}, :controllers => { :registrations => 'registrations'}

devise_scope :user do
  get "sign_in", :to =>"devise/sessions#new"
end

end
4

1 回答 1

2

你的问题对我来说不够清楚。您想管理列表页面中的用户吗?例如,在列表中,列名 admin 下会有复选框?,然后检查链接将使他成为管理员,取消选中将使他成为普通用户?

然后:

在你的 routes.rb

resources :users 

   member do
    put :toggle_admin
   end
end

在你的控制器中

def toggle_admin
   @user = User.find(params[:id])
   @user.toggle!(:admin)
end

在 index.html.erb 中

代替

<td><%= f.check_box (:admin), :id => "IsAdminSelect" %>

                                <%#if user.admin? %>
                                <%#= btn_admin %>
                                <%# else %>
                                <%#= btn_noadmin %>
                                <%#end %><% end %></td>

<td id="admin_user_status_<%=user.id%>"> <%= check_box_tag :admin, 1, user.admin?, update_admin_url: toggle_admin_user_path(user) %></td>

并添加以下js

<script type="text/javascript">
$('body').on('click', '[update_admin_url]' , function(){
    $.ajax({
        url: $(this).attr('update_admin_url'),
        type: 'PUT'
    });
});

添加一个名为 /views/users/toggle_admin.js.erb 的文件,其内容为:

$('#admin_user_status_<%= @user.id%>').html("<%= check_box_tag :admin, 1, @user.admin?, update_admin_url: toggle_admin_user_path(@user) %>")

您不需要在 index.html.erb 中有任何形式

让我知道你是否能正常工作

于 2013-06-05T05:48:25.683 回答