Ruby on Rails控制器WHERE语句

时间:2013-08-01 19:27:43

标签: ruby-on-rails ruby

我正在数据库中搜索一个唯一的密钥,我将它取回但作为一个数组,我必须将第一个对象发送到我的视图

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

我觉得我这样做是错误的。键总是唯一的,所以它永远不会返回多个对象,我总是想要第一个对象。我该怎么做这一行?

3 个答案:

答案 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