我正在数据库中搜索一个唯一的密钥,我将它取回但作为一个数组,我必须将第一个对象发送到我的视图
def watch
@video = Video.where("key = ?", params[:key])
@video = @video[0]
end
我觉得我这样做是错误的。键总是唯一的,所以它永远不会返回多个对象,我总是想要第一个对象。我该怎么做这一行?
答案 0 :(得分:7)
@video = Video.where("key =?" , params[:key]).first
答案 1 :(得分:7)
您可以使用
@video = Video.find_by_key(params[:key])
或者
@video = Video.where(key: params[:key]).first
如果密钥不存在,则返回nil
。如果您更喜欢ResourceNotFound
例外,请使用 bang 方法:
@video = Video.find_by_key!(params[:key])
或
@video = Video.where(key: params[:key]).first!
答案 2 :(得分:2)
在Rails< = 3.2.x上,您应该使用:@video = Video.find_by_key!(params[:key])
On Rails> 3.2.x你应该使用:@video = Video.find_by!(key: params[:key])
这些表单是首选,因为它们引发了ActiveRecord :: RecordNotFound,控制器将404 HTTP代码返回给客户端。
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by-21