【发布时间】:2018-08-04 14:55:22
【问题描述】:
我目前正在尝试让我的用户名验证方法能够区分大小写。默认情况下,普通方法将用户名字符视为唯一的,我需要它来查看“John”==“john”。无论单词本身是如何写的,如何让我的 activerecord 查询方法来验证结果?我拥有的代码如下。最后,如何格式化我的 AJAX 请求以提醒用户他们的用户名可用或不可用?我的代码将在没有原因或异常的情况下触发错误块。
控制台错误
ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: could not identify an equality operator for type json
LINE 1: SELECT DISTINCT "users".* FROM "users" WHERE (username = NUL...
^
: SELECT DISTINCT "users".* FROM "users" WHERE (username = NULL)):
app/controllers/users_controller.rb:30:in `check_duplicate_username'
app/helpers/application_helper.rb:33:in `activate_account_time_zone'
new.html.erb
$( "#user_username" ).blur(function() {
$.ajax({
url: '<%= check_duplicate_username_path %>',
type: "GET",
data: { username: $('#username').val() },
complete: function() {},
success: function(data, textStatus, xhr) {
alert("Your username is available!");
if (data.available == false)
{
$('#username').addClass("error");
}
},
error: function() {
alert("Something went wrong on our end!")
}
});
});
users_controller.rb
def check_duplicate_username
#@user = User.where('username = ?', params[:username]).first
@user = User.where('username = ?', params[:username]).distinct
if @user.present?
render json: {:success => 0, :message => 'Username taken', :user_available => true}
else
render json: {:success => 1, :message => 'Username available', :user_available => false}
end
end
routes.rb
get '/check_duplicate_username' => 'users#check_duplicate_username', as: :check_duplicate_username
【问题讨论】:
-
您的数据库排序规则是什么? (排序规则是数据库用于映射值的一组规则)。
-
我现在正在使用 Postgres 和 Puma。未在 database.yml 中设置 db 排序规则。
-
你能做到吗:
User.where('upper(username) = ?', params[:username].upcase)? -
db 必须有一个排序规则。没有就不能做比较。找出它是什么。
-
我尝试了 Keith Bennett 的方法,但我收到了大写的 NoMethod 错误。我的方法是在检查用户名后不会触发javascript。我在控制台中看到正在比较用户名,但视图中没有发生任何事情。
标签: ruby-on-rails ruby ajax activerecord