我搜索數據庫的唯一關鍵,我得到它回來,但作爲一個數組我接下來要採取的第一個對象,併發送至我的觀點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