辅助函数不起作用
helper functions are not working
users_controller.rb
class UsersController < ApplicationController
include UsersHelper
def new
@user = User.new
end
def create
if isUsernameTaken?
render 'new'
elsif isEmailTaken?
render 'new'
else
@user = User.new(user_params)
if @user.save
else
render 'new'
end
end
end
private
def user_params
params.require(:user).permit(:username,:email,:password,:password_confirmation)
end
end
users_helper.rb
module UsersHelper
def isUsernameTaken?
!(User.find_by(username: params[:username]).nil?)
end
def isEmailTaken?
!(User.find_by(email: params[:email]).nil?)
end
end
问题是 isUsernameTaken?
或 isEmailTaken?
永远不会执行,即使我再次输入相同的用户名,else
部分也会执行。为什么会这样?
这是因为 params[:username]
和 params[:email]
在您的控制器中始终为空白。它们应该是 params[:user][:username]
或 user_params[:username]
.
无论如何,这些检查属于模型,而不是控制器,并且已经有验证器可以完全按照您的意愿执行操作:
class User < ActiveRecord::Base
validates :email, :username, uniqueness: true
end
users_controller.rb
class UsersController < ApplicationController
include UsersHelper
def new
@user = User.new
end
def create
if isUsernameTaken?
render 'new'
elsif isEmailTaken?
render 'new'
else
@user = User.new(user_params)
if @user.save
else
render 'new'
end
end
end
private
def user_params
params.require(:user).permit(:username,:email,:password,:password_confirmation)
end
end
users_helper.rb
module UsersHelper
def isUsernameTaken?
!(User.find_by(username: params[:username]).nil?)
end
def isEmailTaken?
!(User.find_by(email: params[:email]).nil?)
end
end
问题是 isUsernameTaken?
或 isEmailTaken?
永远不会执行,即使我再次输入相同的用户名,else
部分也会执行。为什么会这样?
这是因为 params[:username]
和 params[:email]
在您的控制器中始终为空白。它们应该是 params[:user][:username]
或 user_params[:username]
.
无论如何,这些检查属于模型,而不是控制器,并且已经有验证器可以完全按照您的意愿执行操作:
class User < ActiveRecord::Base
validates :email, :username, uniqueness: true
end