Ruby on Rails:设计Gem Admin自定义

时间:2013-10-07 01:57:49

标签: ruby-on-rails ruby devise haml admin

如何在haml:

中将此代码作为链接或按钮运行
current_user.update_attribute :admin, true

我正在努力让它成为一个网站的一部分,使一个管理员。这是将管理员帐户设置为他们所拥有的wiki的一部分。

2 个答案:

答案 0 :(得分:0)

最简单的方法可能是在编辑用户表单上创建一个复选框,该复选框对应于admin boolean model字段。然后,当您的更新操作保存用户记录时,它将根据表单中包含的字段更新属性:

-form_for @user do |f|
    %p
        = f.label :admin
        %br
        = f.check_box :admin 

当然,您需要以某种方式限制对更新用户表单的访问,以便只有管理员才能看到它。然而,这是一个单独的问题。希望这有帮助!

答案 1 :(得分:0)

只想分享我的解决方案。这似乎是很快完成它的最佳方式。我忘了早点发布:

我的电子邮件基本上是一个永远是管理员的主帐户。或者,您可以将数据投入生产以设置第一个帐户。从那里,任何管理员都可以设置其他管理员!我为为Devise生成的用户模型添加了一个名为admin的布尔值,以便设置管理员。

rails g migration AddAdminToUsers admin:boolean

admin_updater.html.haml

- if current_user.email == 'shravvmehtaa@gmail.com'
    = form_for :emails, url: make_admin_emails_path, :html => {:class => "form-inline"} do |f|
      .form-group
        %span
          %p{:style => "margin: 0px;"}
            = f.label :email, "Email:"
          %p{:style => "float: left;"}
            = f.text_field :email, :style=> "width: 200px;", :class => "form-control"
          %p{:style => "margin-left: 10px; float: left;"}
            = f.submit "Make Admin", :class => 'btn btn-success'
    = form_for :emails, url: delete_admin_emails_path, :html => {:class => "form-inline"} do |f|
      .form-group
        %span
          %p{:style => "margin: 0px;"}
            = f.label :email, "Email:"
          %p{:style => "float: left;"}
            = f.text_field :email, :style=> "width: 200px;", :class => "form-control"
          %p{:style => "margin-left: 10px; float: left;"}
            = f.submit "Delete Admin", :class => 'btn btn-danger'
    %b Admins:
    - @users = User.all
    - @users.each do |user|
      - if user.admin?
        %div{:style => "border: 2px solid black; background-color: white; padding: 5px; height: 63px; width: 400px; margin-bottom: 10px;"} 
          %span{:style => "float: left;"}  
            = image_tag (user.profile_pic)
          %span{:style => "float: left; margin-left: 10px;"}
            = user.name
            %br
            = link_to(user.email, "mailto:" + user.email)

控制器

class MemberController < ApplicationController
  before_filter :authenticate_user!, :except => [:show, :index]
  layout "dashboard"

  def make_admin
    @user = User.find_by_email(params[:emails][:email])
    unless @user.nil?
      @user.update_attribute(:admin, true)
    end
    redirect_to '/dashboard/develop'
  end

  def delete_admin
    @user = User.find_by_email(params[:emails][:email])
    unless @user.nil?
      @user.update_attribute(:admin, false)
    end
    redirect_to '/dashboard/develop'
  end

end

这是上面代码部分的结果输出。我个人将我与Facebook整合在一起,因此我需要一些快速代码来获取电子邮件信息并在帐户制作完成后设置管理员: enter image description here