2015-10-05 65 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

相关问题