正确的防止Rails中重复记录的方法

ale*_*ale 5 ruby-on-rails ruby-on-rails-3

在我的模型中,我有这个:

validates :name, :presence => true, :uniqueness => true
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有:

...
if @location.save
    format.html { redirect_to @location, :notice => 'Location was successfully created.' }
    format.json { render :json => @location, :status => :created }
...
Run Code Online (Sandbox Code Playgroud)

如果表中没有此名称的记录,则会成功创建记录.我认为在插入可能重复的记录而不是依赖数据库约束之前检查是一个好习惯吗?

我想我应该向控制器添加一些东西来检查?这样做的正确方法是什么?

非常感谢.

MrT*_*rus 7

在记录到达数据库之前,Rails会进行验证.如果记录未通过验证,则它将不会保存,.save并将返回false,这将导致else控制器的子句执行.该子句通常会重新呈现已提交的页面,并显示错误,以便更正它们.

假设您的控制器是这样构建的,您不需要做任何其他事情.当然,您应该确保在验证中镜像任何数据库约束,否则记录可能会通过验证,但会在保存时违反约束而产生错误.


Sal*_*lil 6

您无需在控制器中执行任何操作.

The correct way to prevent duplicate records in Rails is used 
validation in model which you did correctly.
Run Code Online (Sandbox Code Playgroud)


Ted*_*ddy 6

在数据库中添加唯一索引.这样,如果某些内容滑过模型验证(很少见,但技术上可行),保存到数据库的查询将失败.