使用 Rails 从表单中检索值 (phone_number) 并检查它是否存在于数据库中。如果该值存在,则发送不同的 ajax 响应
Retrieving a value (phone_number) from a form using Rails and checking if it exists in the database. Send different ajax responses if the value exists
正在尝试实现 phone 号码检查器。它包括用户输入 phone 号码、提交表单并检查 phone 号码列表记录我的数据库并查看它是否存在。我想根据数据库中是否存在用户输入来发送不同的 AJAX 响应。
我有 ajax 来回复消息,但是当我输入数据库中存在的数字时(例如 07780319014),我得到 phone-number-not-找到响应。
下面的实现代码:
app/views/phones/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 %>
app/controllers/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
app/views/phones/phone-found.js.erb
$('#phone-number-found').html('Working!');
$('#phone-number-not-found').html('');
$('#phone-number-error').html('');
app/view/phones/phone-not-found.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('Working!');
$('#phone-number-error').html('');
app/view/phones/error.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('');
$('#phone-number-error').html('Working!');
config/routes.rb
resources :phones, path: '4g-promo'
如果有人能解决我的问题,我将不胜感激。谢谢!
你以错误的方式取出参数
走错路
@phone_number = Phone.where('phone_number = ?', params[:phone_number])
正确的方式
@phone_number = Phone.where('phone_number = ?', params[:phone][:phone_number])
您的表单数据应全部在 params[:phone]
哈希中找到,
所以如果你想要完全匹配,那么你可以这样做:
@phone_number = Phone.where(phone_number: params[:phone][:phone_number])
这将 return 一个 ActiveRecord::Relation
(例如一个空数组或匹配数组),或者:-
@phone_number = Phone.find_by(phone_number: params[:phone][:phone_number]
return 记录或 nil
。
但是,了解最终用户后,他们会以不同的方式格式化他们的 phone 号码,例如间距、破折号等。因此它不一定会完全匹配。
您可能还想在上述两个示例中使用 phone_params
而不是 params[:phone]
。
正在尝试实现 phone 号码检查器。它包括用户输入 phone 号码、提交表单并检查 phone 号码列表记录我的数据库并查看它是否存在。我想根据数据库中是否存在用户输入来发送不同的 AJAX 响应。
我有 ajax 来回复消息,但是当我输入数据库中存在的数字时(例如 07780319014),我得到 phone-number-not-找到响应。
下面的实现代码:
app/views/phones/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 %>
app/controllers/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
app/views/phones/phone-found.js.erb
$('#phone-number-found').html('Working!');
$('#phone-number-not-found').html('');
$('#phone-number-error').html('');
app/view/phones/phone-not-found.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('Working!');
$('#phone-number-error').html('');
app/view/phones/error.js.erb
$('#phone-number-found').html('');
$('#phone-number-not-found').html('');
$('#phone-number-error').html('Working!');
config/routes.rb
resources :phones, path: '4g-promo'
如果有人能解决我的问题,我将不胜感激。谢谢!
你以错误的方式取出参数
走错路
@phone_number = Phone.where('phone_number = ?', params[:phone_number])
正确的方式
@phone_number = Phone.where('phone_number = ?', params[:phone][:phone_number])
您的表单数据应全部在 params[:phone]
哈希中找到,
所以如果你想要完全匹配,那么你可以这样做:
@phone_number = Phone.where(phone_number: params[:phone][:phone_number])
这将 return 一个 ActiveRecord::Relation
(例如一个空数组或匹配数组),或者:-
@phone_number = Phone.find_by(phone_number: params[:phone][:phone_number]
return 记录或 nil
。
但是,了解最终用户后,他们会以不同的方式格式化他们的 phone 号码,例如间距、破折号等。因此它不一定会完全匹配。
您可能还想在上述两个示例中使用 phone_params
而不是 params[:phone]
。