2015-10-16 5 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 получает exexued, то как еще что-то еще выполняется? – InQusitive

ответ

3

Это потому, что params[:username] и params[:email] всегда пустые в вашем контроллере. Они должны быть params[:user][:username] или user_params[:username].

Во всяком случае, эти виды чеков относится к модели, а не контроллер, а там уже есть валидаторы делать именно то, что вы хотите:

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

в этом случае, если имя пользователя повторяется, какой вывод он дает, чтобы мы могли ссылаться на него для вывода сообщения об ошибке? – InQusitive

+0

Как и все проверки, сообщения об ошибках будут доступны через '@ user.errors'. – BroiSatse

Смежные вопросы