如何解析activerecord查询以生成集合?

时间:2014-12-16 04:45:39

标签: mysql ruby-on-rails ruby activerecord

我的观看代码如下:

<%= b.input :city, as: :select, collection: Lov.where(:remarks => 'lov_city').select('id').select('lov_content'),  placeholder: 'Enter City', label: false %>

代码呈现时,我视图中显示的数据列表为#<Lov:0x3241351> ..

实际上Lov表是一个与任何其他表无关的参考表,当我在rails控制台(rails c)中运行并运行相同的“Lov.where(:remarks => 'lov_city').select('id').select('lov_content')”时,数据显示但是视图是不同。

来自rails console:

jruby-1.7.16.1 :001 > Lov.where(:remarks => 'lov_city').select('id').select('lov_content')
  lovs Columns (6.0ms)  SHOW FULL COLUMNS FROM `lovs`
  Lov Load (8.0ms)  SELECT id, lov_content FROM `lovs` WHERE `lovs`.`remarks` = 'lov_city'
 => [#<Lov id: 229, lov_content: "Ayer Baloi">, #<Lov id: 230, lov_content: "Ayer Hitam">, #<Lov id: 231, lov_content: "Ayer Tawar 2">, #<Lov id: 232, lov_content: "Ayer Tawar 3">, #<Lov id: 233, lov_content: "Ayer Tawar 4">

2 个答案:

答案 0 :(得分:1)

如果要获取某些选定列,请使用pluck

Lov.where(:remarks => 'lov_city').pluck(:id, :lov_content)

答案 1 :(得分:0)

Lov.where(:remarks => 'lov_city').select('id').select('lov_content')

这将返回一个只有id和lov_content作为属性的活动记录对象。我不确定你要显示什么,但你需要提供一个值集合而不是一个activerecord对象。

首先,您可以一次选择多个属性,而无需编写多个时间选择,例如:

Lov.where(:remarks => 'lov_city').select([:id, :lov_content])

如果你需要提供lov_content列表,那么你可以用它来返回一个lov_content数组:

Lov.where(:remarks => 'lov_city').collect(&:lov_content)