2015-10-15 68 views
0

我正在做我的红宝石项目,但我遇到了问题。 我在下面的红宝石般的地方出现问题。Ruby on Rails在哪里()

@talk = Talk.where(params[:ask]) 

我得到

"#<Talk::ActiveRecord_Relation:0x007f811404dae8>" 

这从@talk。 我在问我的数据库中找到答案的价值。 如何打印where()的谈话价值?

+0

'params [:ask]'是什么?以及您要搜索的数据库中有哪些列? 哪里会返回一个集合。如果你只想要第一条记录匹配查询,那么在末尾加上'.first' –

回答

1

如果您在你的谈话对象中有不同的询问值,那么你可以做

@talk = Talk.find_by(ask: params[:ask]) 

这将返回一个单一谈话对象。如果没有找到这样的询问值,则返回零。

1

只有在调用像first,each等特殊方法时才会检索对象。这被称为延迟加载。

@talk = Talk.where(params[:ask])

@talk = Talk.where(params[:ask]).first

这样你会得到将由您返回的第一个条目,其中,你可以阅读一些关于延迟加载VS预先加载上this线程

1

where()将返回一个集合对象。您错过了一个列名称。

如果你想从集合访问一个对象,请使用

@talk = Talk.where(column_name: params[:ask]).first #Or Talk.where(column_name: params[:ask]).last depending on the requirement 

如果您要访问的所有对象,你将不得不遍历每个对象返回,

@talks = Talk.where(column_name: params[:ask]) 

-unless @talk.nil? 
    @talks.each do |talk| 
    = talk.column_name 
相关问题