2017-02-22 45 views
0

Попытка реализовать проверку номера телефона. Он состоит из пользователя, вводящего номер телефона, отправки формы и проверки на список номеров телефонов, которые хранят мою базу данных, и видя, существует ли она. Я хочу отправить различные ответы AJAX в зависимости от того, существует ли вход пользователя в базе данных или нет.Извлечение значения (phone_number) из формы с использованием Rails и проверка наличия в базе данных. Отправляйте различные ответы ajax, если это значение существует

У меня есть ajax, чтобы ответить сообщением, однако, когда я ввожу число, существующее в базе данных (например, 07780319014), я получаю ответ на номер телефона, не найденный.

Реализован код ниже:

приложение/просмотров/телефоны/index.html.erb

<%= form_for :phone, url: phones_path, remote: true, html: { id: 'phone-number-form'} do |f| %> 
    <div id="phone-number-found"></div> 
    <div id="phone-number-not-found"></div> 
    <div id="phone-number-error"></div> 
    <%= f.text_field :phone_number %> 
    <%= submit_tag("Check") %> 
<% end %> 

приложение/контроллеры/phones_controller.rb

class PhonesController < ApplicationController 
    def create 
    @phone_number = Phone.where('phone_number = ?', params[:phone_number]) 
    if @phone_number.exists? 
     render 'phone-found' 

    elsif @phone_number.blank? 
     render 'phone-not-found' 

    else 
     render 'errors' 
    end 
    end 

    private 

    def phone_params 
    params.require(:phone).permit(
     :phone_number 
    ) 
    end 
end 

приложение/просмотров/телефоны/phone-found.js.erb

$('#phone-number-found').html('Working!'); 
$('#phone-number-not-found').html(''); 
$('#phone-number-error').html(''); 

приложение/просмотр/телефоны/телефон-не-found.js.erb

$('#phone-number-found').html(''); 
$('#phone-number-not-found').html('Working!'); 
$('#phone-number-error').html(''); 

приложение/просмотр/телефоны/error.js.erb

$('#phone-number-found').html(''); 
$('#phone-number-not-found').html(''); 
$('#phone-number-error').html('Working!'); 

конфигурации/routes.rb

resources :phones, path: '4g-promo' 

Был бы рад, если бы кто-то мог решить мою проблему. Благодаря!

+0

скажите, работает ли он или нет? –

+0

попробуйте с 'phone_number LIKE?', params [: phone_number] – jithya

+0

Nah по-прежнему получает ответ от телефона не найден, попробовав, что @jith –

ответ

0

Вы принимаете Params в неправильно

Неправильный путь

@phone_number = Phone.where('phone_number = ?', params[:phone_number]) 

Правильный способ

@phone_number = Phone.where('phone_number = ?', params[:phone][:phone_number]) 
+0

Спасибо за ваш отзыв @Aniket Shivam Tiwari К сожалению, это сломало все это вместе:/Я думаю, это потому, что мои поля phone_number и sim_number в db - строки db/schema.rb 'create_table" телефоны ", force:: cascade do | t | t.string «phone_number» t.string «sim_number» конец ' я изменю их в целые числа, (что должно быть на самом деле) Ошибка у меня в консоли это 500 ошибка: может» t convert nil в Integer –

+0

Что именно вы получаете в params [: phone_number] покажите мне на консоли. Также выполните параметры [: phone_number] .class на консоли и поделитесь своим результатом –

+0

Итак, вы получаете нуль в params [: phone_number]. Поэтому вам нужно проверить, почему он получает нуль –

0

Ваши данные формы должны быть найдены в params[:phone] хэша,

Поэтому, если вы хотите получить точное соответствие, то вы можете сделать:

@phone_number = Phone.where(phone_number: params[:phone][:phone_number]) 

который вернет ActiveRecord::Relation (т.е. пустой массив или массив совпадений), или: -

@phone_number = Phone.find_by(phone_number: params[:phone][:phone_number] 

Который будет возвращать либо запись или nil.

Однако, зная конечных пользователей, они будут форматировать свой номер телефона различными способами, например. интервал, тире и т. д. Поэтому он не обязательно будет точно соответствовать.

Вы также, вероятно, захотите использовать phone_params вместо params[:phone] в обоих примерах выше.