如何在选择框中显示查找表值?

时间:2009-08-20 05:54:41

标签: ruby-on-rails lookup-tables

与敏捷书一起阅读,它在脚注中说:

  

...您只需将选择助手传递给您在查找中执行命令(:all)的结果   表。

好的......

<%= f.select :source, Source.find(:all) %>

我的源控制器(以及表格)如下所示:

create_table :sources do |t|
  t.string :source

  t.timestamps
end

但我的选择框很乱,我在所有值和显示中得到这种类型的数据:

#<Source:0x23a2bfc>

所以我尝试了Source.find(:all, :select => 'name,id'),但这仍然让我看起来很糟糕。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

Source.find(:all)

将返回一个Source对象数组 - 这不是你想要的。你想要的是一系列选项。 之类的东西

select(:source, "source_id", Source.all.collect {|p| [ p.source, p.id ] })

答案 1 :(得分:3)

您需要传递一组选项(或键值选项)。 select中的第三个参数实际上传递给options_for_select方法。用一个例子可以很好地说明这一点。

options_for_select(["a", "b"])

...变成

<option>a</option><option>b</option>

大多数情况下,您对键值对更感兴趣

options_for_select([["a", "1"], ["b", "2"]])

...变成

<option value="1">a</option><option value="2">b</option>

作为简介,传递整个对象集合并映射它们以符合options_for_select所期望的内容是很常见的。

options_for_select(Model.all.map { |m| [m.attr1, m.attr2] })

...并使用视图中的select方法回答您的问题

<%= f.select(:method, Model.all.map { |m| [m.attr1, m.attr2] }) %>