如何在选择框中获取查找表值?

发布于 2024-08-02 23:29:59 字数 523 浏览 7 评论 0原文

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

...您只需将查找时执行 find(:all) 的结果传递给 select 助手 桌子。

好吧...

<%= 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') 但这仍然给了我看起来很奇怪的东西。

我做错了什么?

Reading along with the agile book, it says this in a footnote:

... You simply pass the select helper the result of doing a find(:all) on your lookup
table.

Okay ...

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

My source controller (and therefore table) looks like this:

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

  t.timestamps
end

But my select box is a mess, I get this type of data in all the values and displays:

#<Source:0x23a2bfc>

So I tried doing a Source.find(:all, :select => 'name,id') but that still gives me the whacky looking stuff.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝梦月影 2024-08-09 23:29:59
Source.find(:all)

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

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

will return an array of Source objects - this is not what you want. What you wants is an array of options. Something like:

select(:source, "source_id", Source.all.collect {|p| [ p.source, p.id ] })
夜灵血窟げ 2024-08-09 23:29:59

您需要传递选项集合(或键值选项)。 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] }) %>

You need to pass a collection of options (or key-value options). The third parameter in select is actually passed to the options_for_select method. This is best illustrated with an example.

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

... becomes

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

Most of the time you'll be more interested in key-value pairs

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

... becomes

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

As a short-hand, it's common to pass an entire collection of objects and map them to conform what options_for_select is expecting.

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

...and to answer your question using the select method inside of a view

<%= f.select(:method, Model.all.map { |m| [m.attr1, m.attr2] }) %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文