ItemsSource
MeditationDiaryListView
问题是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?
部分。为什么会这样?
答案 0 :(得分:3)
这是因为params[:username]
和params[:email]
在您的控制器中始终为空。它们应为params[:user][:username]
或user_params[:username]
。
无论如何,这些检查属于模型,而不是控制器,并且已经有验证器可以完全按照您的要求进行:
class User < ActiveRecord::Base
validates :email, :username, uniqueness: true
end