2

我正在数据库中搜索一个唯一键,然后将其取回,但是作为一个数组,我必须获取第一个对象并将其发送到我的视图

def watch
  @video = Video.where("key = ?", params[:key])
  @video = @video[0]
end

我觉得我这样做是错误的。键始终是唯一的,因此它永远不会返回一个以上的对象,我总是想要第一个对象。我怎样才能使这一行?

4

3 回答 3

8
@video = Video.where("key =?" , params[:key]).first
于 2013-08-01T19:28:46.080 回答
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!
于 2013-08-01T19:36:05.873 回答
2

在 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

于 2013-08-02T00:31:10.533 回答