【问题标题】:Ruby on Rails: Devise Gem Admin customizationRuby on Rails:设计 Gem 管理员自定义
【发布时间】:2013-10-07 01:57:48
【问题描述】:

如何在haml中将此代码作为链接或按钮运行:

current_user.update_attribute :admin, true

我正在努力做到这一点,所以网站的一部分可以让一个管理员成为管理员。这是在他们拥有的 wiki 中设计管理员帐户的一部分。

【问题讨论】:

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


    【解决方案1】:

    可能最简单的做法是在您的编辑用户表单上创建一个复选框,该复选框对应于管理员布尔模型字段。然后,当您的更新操作保存用户记录时,它将通过表单中包含该字段来更新属性:

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

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

    【讨论】:

    • 是的,这就是我的观点。我有一个只有一个帐户可以看到的页面,我希望在该页面中运行一段这样的代码,以便我可以添加管理员!
    • 假设您在 Rails 中使用传统的表单处理程序,只需将字段添加到您的表单应该允许通过简单的 User#update 控制器操作更新该属性。除非我错过了什么。你能分享你的视图代码吗?
    【解决方案2】:

    只是想分享我的解决方案。这似乎是最好的方法,可以很快地做到这一点。之前忘记发了:

    我让我的电子邮件本质上是一个主帐户,它将永远是一个管理员。或者,您可以将数据投入生产以设置第一个帐户。从那里,任何管理员都可以设置其他管理员!我在为 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 集成在一起,因此我需要一些快速代码来获取电子邮件信息并在创建帐户后设置管理员:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多