2014-12-31 4 views
0

Я использую полосу для проверки электронной почты, но она дала мне эти вопросы, пожалуйста, помогите мне.Проблемы с полосой ROR

NoMethodError в UsersController # check_email неопределенный метод `полосы» для ноль: NilClass

def check_email 

    if params[:email].blank? 
    @email = params[:email].strip 
    user = User.find_by_email(@email) 
    if user.nil? 
     text = "false" 
    else 
     text = "true" 
    end 
    render :text => text 

    else 
    render :text =>text 
    end 
    end 
+0

'Params [: EMAIL]' равна нулю. Вам нужно выяснить, почему. Может быть, опечатка в названии поля формы или что-то еще? –

+3

Также вы имели в виду 'if params [: email] .present?' (Напротив '.blank?') –

+1

Что сказал Серджио. Кроме того, ваше форматирование неразборчиво. И вам не нужно «render: text => text» в обеих ветвях условия, сразу после окончания один раз. И 'text' даже не назначается в вашем другом пути. 'text = user.present?' упростит другой путь. '@ email' имеет избыточную область, так как вы никогда не ссылаетесь на нее за пределами метода ... –

ответ

1

на основе обратной связи по Серджио и Брэд:

def check_email 
    text = params[:email].present? && User.where(email: params[:email].strip).exists? 
    render :text => text 
end 
+1

' User.where (email: email) .exists? 'намного эффективнее, BTW. –

+0

Обновлено, спасибо @Sergio. – LeEnno

+0

Также давайте избавимся от условного здесь :) http://pastebin.com/Lbkkh8yZ –

0

Update как: -

def check_email 
    if params[:email].present? 
    @email = params[:email].strip 
    user = User.find_by_email(@email) 
    unless user.present? 
     text = "false" 
    else 
     text = "true" 
    end 
    render :text => text 
    else 
    render :text =>text 
    end 
end 
0

У вас есть небольшая ошибка, вам нужно использовать:

unless params[:email].blank? 

Или

if params[:email].present? 

Я рекомендую прочитать о blank? vs nil? vs empty? vs present?

0

if params[:email].blank? должен быть if params[:email].present?. Проблема заключается в том, когда params[:email] равна нулю вы вызываете метод strip на него, т.е. nil.strip

Меняем его followin

def check_email 
    if params[:email].present? 
     @email = params[:email].strip 
     user = User.find_by_email(@email) 
     text = user.nil? ? "false" : "true" 
    else  
     text = "please enter email address" 
    end 
    render :text =>text 
    end 
Смежные вопросы