我搜索数据库的唯一关键,我得到它回来,但作为一个数组我接下来要采取的第一个对象,并发送至我的观点Ruby on Rails的控制器WHERE语句
def watch
@video = Video.where("key = ?", params[:key])
@video = @video[0]
end
我感觉我正在做这个错误的方式。键总是唯一的,所以它永远不会返回多个对象,我总是希望第一个对象。我怎样才能做到这一行?
我搜索数据库的唯一关键,我得到它回来,但作为一个数组我接下来要采取的第一个对象,并发送至我的观点Ruby on Rails的控制器WHERE语句
def watch
@video = Video.where("key = ?", params[:key])
@video = @video[0]
end
我感觉我正在做这个错误的方式。键总是唯一的,所以它永远不会返回多个对象,我总是希望第一个对象。我怎样才能做到这一行?
On Rails的< = 3.2.x中你应该使用:@video = Video.find_by_key!(params[:key])
On Rails的> 3.2.x中你应该使用:@video = Video.find_by!(key: params[:key])
这些形式是首选,因为他们提高Ac tiveRecord :: RecordNotFound并且控制器将404 HTTP代码返回给客户端。
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by-21
@video = Video.where("key =?" , params[:key]).first
您可以使用
@video = Video.find_by_key(params[:key])
或者
@video = Video.where(key: params[:key]).first
这些返回nil
如果该键不存在。如果你喜欢一个ResourceNotFound
异常使用爆炸方法:
@video = Video.find_by_key!(params[:key])
或者
@video = Video.where(key: params[:key]).first!
关键在我的情况是指列在数据库中,这是否仍是这项工作? –
噢好吧我看到你在做什么之后阅读这个,看起来像.first更赞赏,因为这个版本更多不赞成http://api.rubyonrails.org/classes/ActiveRecord/Base.html –
这些被称为[动态(http://guides.rubyonrails.org/active_record_querying.html#dynamic-finders),它们在Rails 4中已被弃用。 – Stefan