2015-10-05 56 views
0

我有一個名爲「blog」的模型,它有幾列,其中一列叫做「token」。ActiveRecord:根據URL中的一個字段檢索mySQL數據

我想根據這是在URL中的令牌來獲取行 - 例如,如果用戶進入/blog/post1,我要找回其中token = post1

在我的應用程序設置我做行:

get '/blog/:id' do 
    @postID = params[:id] 
    @thePost = Blog.where(token: @postID) 
    render 'blog/index' 
end 

當我嘗試訪問<%= @thePost %>在我.erb文件,我得到:

#<Sequel::Mysql2::Dataset:0x007fdec1777318>

如何訪問行中的實際數據?

回答

1

Blog.where(token: @postID)返回將所有的比賽名單 - 即使列表只包含一個的Elemen。 OP使用Sequel ORM,而不是ActiveRecord(提示是返回類型Sequel::Mysql2::Dataset),因此,我建議使用(視或first!你的用例)first代替where

@thePost = Blog.first(token: @postID) 

從文檔:

一個別名,用於首先調用模型的數據集,但優化處理單個參數的情況。

+1

我認爲'take''而不是'first'會更好,因爲AR4在使用'first'時引入了強制排序,使得'take'具有更高的性能。 – yez

+0

@yez:但是OP使用'Sequel' gem而不是'ActiveRecord'。 'first'中的AR優化在這種情況下不相關。 – spickermann

+0

我錯過了這個細節,謝謝指出!我會改變我的答案。 – yez

2

你正在返回一個關係,你想要返回的是一個實際記錄。爲此,請在where調用結束時使用first

Blog.where(token: @postID).first 
+0

'Sequel :: Mysql2 :: Dataset'告訴OP使用'Seqel'而不是'ActiveRecord'。 – spickermann

相關問題