2015-10-16 166 views
0
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部分被执行。这是为什么发生?辅助功能不工作

+0

它被执行,否则您将收到noMethod错误。它只是按照你所说的去做,而不是你想要的。 :) – BroiSatse

+0

不相关,但你的发现可能会更好地表示为'User.find_by_username(params [:username])。present?'等 –

+0

@BroiSatse:如果if或elsif得到执行怎么也得到执行? – InQusitive

回答

3

这是因为params[:username]和​​在控制器中总是空白。他们应该是params[:user][:username]user_params[:username]

无论如何,这些类型的检查属于典型的,不是控制器和目前已经有验证程序做的正是你想要什么:

class User < ActiveRecord::Base 
    validates :email, :username, uniqueness: true 
end 
+0

在这种情况下,如果用户名重复,它会给出什么输出,以便我们可以引用它来打印错误消息? – InQusitive

+0

至于所有验证,错误消息将通过'@ user.errors'提供。 – BroiSatse