ruby-on-rails - “存在吗?” 方法不起作用-尝试在保存到数据库之前检查用户是否存在
问题描述
我是 Rails 的新手,正在尝试为我的网站创建一个注册表单。它工作正常,但有一个例外——它将用户保存到数据库中,而无需先检查它们是否存在。在保存之前如何检查以确保用户存在?
用户控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.exists?(:username) == false && @user.save(user_params)
session[:id] = @user.id
redirect_to posts_path
else
redirect_to '/signup'
end
end
def edit
end
def update
end
def show
end
def destroy
end
private
def user_params
params.require(:user).permit(:username, :jabber_id, :password)
end
end
解决方案
一个非常简单的验证将是这样的:
# in your user.rb
validates :username, uniqueness: true
您可能想忽略大小写:
# in your user.rb
validates :username, uniqueness: { case_sensitive: false }
并将您的create
方法更改为如下所示:
def create
@user = User.new(user_params)
if @user.save
session[:id] = @user.id
redirect_to posts_path
else
render :new
end
end
此外,我建议在数据库级别也有一个唯一索引:
# in a migration
add_index :users, :username, unique: true
推荐阅读
- python - 在 Python 中使用 Cron 表达式查找上次触发时间
- spring - 为什么 ErrorController 不抛出我的自定义异常类?
- kdb - KDB 窗口连接或 bin 使用来比较时间范围内的记录
- php - 无法在过滤器中定位重力输入或字段 ID
- reactjs - 将图标组件传递给 ReactJS 中的另一个组件
- python - 如何在 Python 3 中修复这个简单的函数?
- python - 对从一个 df 到另一行的大量行执行操作的最佳方法是什么?
- javafx - 当我开始另一个阶段时,ProgressIndicator 完成
- python - 胶囊网络和可重复性
- r - 如何从 R Shiny 更新 JSON 文件?