Agile Rails 上的一个练习,现在有这样一个需求,应用安装以后需要初始化管理员,因为表中没有数据,所以允许第一个用户可以使用任意用户名登录,然后再创建管理员。 我的思路是: 1.在 session controller 中加个判断,如果 User.count.zero? 满足,则 使用创建这个用户,但是 Rails 4 中有一个 strong parameter 概念,这个方法定义到了 users_controller 中,我有必要再一次在 session controller 中添加这个方法?有没有办法可以把其他 controller 中私有方法直接拿来使用。
这是书上的原话 : When the system is freshly installed on a new machine, there are no administrators defined in the database, and hence no administrator can log on. But, if no administrator can log on, then no one can create an administrative user. Change the code so that if no administrator is defined in the database, any username works to log on (allowing you to quickly create a real administrator).
lass SessionsController < ApplicationController
skip_before_action :authorize
def new
end
def create
if User.count.zero? ### 没有执行!
user = User.create(user_params)
session[:user_id] = user.id
redirect_to admin_url
else
user = User.find_by(name: params[:name])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to admin_url
else
redirect_to login_url, alert: 'Invalid user/password combination'
end
end
end
def destroy
session[:user_id] = nil
redirect_to store_url, notice: 'Logged out'
end
private
def init
end
def user_params
params.permit(:name, :password, :password_confirmation)
end
end