2015-10-16 208 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