我正在数据库中搜索一个唯一键,然后将其取回,但是作为一个数组,我必须获取第一个对象并将其发送到我的视图
def watch
@video = Video.where("key = ?", params[:key])
@video = @video[0]
end
我觉得我这样做是错误的。键始终是唯一的,因此它永远不会返回一个以上的对象,我总是想要第一个对象。我怎样才能使这一行?
我正在数据库中搜索一个唯一键,然后将其取回,但是作为一个数组,我必须获取第一个对象并将其发送到我的视图
def watch
@video = Video.where("key = ?", params[:key])
@video = @video[0]
end
我觉得我这样做是错误的。键始终是唯一的,因此它永远不会返回一个以上的对象,我总是想要第一个对象。我怎样才能使这一行?
@video = Video.where("key =?" , params[:key]).first
您可以使用
@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!
在 Rails <= 3.2.x 上,您应该使用:@video = Video.find_by_key!(params[:key])
在 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