如何在不使用Ruby on Rails的设计的情况下添加新的管理员用户

时间:2014-01-07 04:50:08

标签: ruby-on-rails ruby-on-rails-3 devise

我是Ruby on Rails的新手,我使用的是Ruby 1.9.3 andRails 4.0.2。

如何在不使用设计的情况下添加新的管理员用户?

我正在使用下面的代码并提交添加新的用户表单,数据admin_user_params返回一个空白,并在数据库中插入一个空白记录。

这是我的用户数据库表

create_table :users do |t|
  t.integer :role_id
  t.string :name
  t.string :email
  t.string :username
  t.string :encrypted_password
  t.string :reset_password_token
  t.string :is_status
  t.string :is_active
  t.integer :sign_in_count
  t.string :current_sign_in_ip
  t.string :last_sign_in_ip
  t.string :authentication_token
  t.datetime :reset_password_sent_at
  t.datetime :remember_created_at
  t.datetime :current_sign_in_at
  t.datetime :last_sign_in_at

这是我的控制器

class Admin::UsersController < ApplicationController

  before_action :set_admin_user, only: [:show, :edit, :update, :destroy]

  def new
    @admin_user = User.new
  end



 def create
    #@admin_user = Admin::User.new(admin_user_params)
    @admin_user = User.new(admin_user_params)

    respond_to do |format|
      if @admin_user.save
        format.html { redirect_to @admin_user, notice: 'User was successfully created.' }
        format.json { render action: 'show', status: :created, location: @admin_user }
      else
        format.html { render action: 'new' }
        format.json { render json: @admin_user.errors, status: :unprocessable_entity }
      end
    end
  end
end 

* 这是我的用户模型*

注意:

我不想创建admin_user模型。我只想在管理区域和前端区域使用用户模型。

class User < ActiveRecord::Base

  #Setup accessible (or protected) attributes for your model
  attr_accessible :name, :username, :role_id, :email, :password, :password_confirmation, :remember_me, :id, :admin_permission
  attr_accessor :password, :new_password, :previous_email, :previous_username, :remember_me

  belongs_to :role

  def super_admin?
   self.role.name == "Super Admin"
  end
end

这是我的观点

<%= form_for [:admin,@admin_user]  do |f| %>
  <% if @admin_user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@admin_user.errors.count, "error") %> prohibited this admin_user from being saved:</h2>

      <ul>
      <% @admin_user.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :Name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :Email %><br>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :Username %><br>
    <%= f.text_field :username %>
  </div>
  <div class="field">
    <%= f.label :Password %><br>
    <%= f.text_field :encrypted_password %>
  </div>
  <div class="actions">
    <p><%= f.submit 'Sign up'  %></p>
  </div>
 <% end %> 

请帮助。

2 个答案:

答案 0 :(得分:2)

我认为添加管理员用户功能的最简单方法是在admin表中添加一个布尔users行。

然后,在您的控制器中,您可以使用before_action控制对特定操作的访问,以确保用户是管理员,或者重定向到root_url(或任何地方)。

您还可以通过在条件中调用User#admin?来有选择地查看视图中的元素。

不确定这是否符合您的需求,但我希望它有所帮助。

答案 1 :(得分:1)

一种很好的灵活方法是使用Rolify + Authority。除了其他角色之外,这还允许您为用户分配管理员角色。从那里,您可以根据这些角色控制对特定方法的访问。

角色通过关联应用于用户,因此您可以提出诸如

之类的问题
@user.has_role? :admin  

这可以是全局范围,模型或模型实例。细粒度控制,易于使用。