如何定义 options_for_select 中的值?

How do I define values in options_for_select?

我有这个 options_for_select 电话:

    <%= f.select(:agents, options_for_select(@agents), {},{multiple: true, size: 10, :id => "agents"}) %>

数据库中目前只有 2 个代理,但它们显示为 #<Agent:0x007fc1b121c490> 格式。我希望它们显示为 @agent.name 并且值为 @agent.id.

我如何编辑上面的这段代码来得到这个?谢谢!

您应该直接提供您想要用作选项值和 ID 的内容:
<%= f.select(:agents, options_for_select(@agents.map{ |agent| [agent.name, agent.id]}), {},{multiple: true, size: 10, :id => "agents"}) %>
参考 documentation API
另外,您可能想要 select 当前值:
<%= f.select(:agents, options_for_select(@agents.map{ |agent| [agent.name, agent.id]}, @current_agent), {},{multiple: true, size: 10, :id => "agents"}) %>

实际上有一个专门针对集合的帮助程序,options_from_collection_for_select 就是用来处理这种情况的。

<%= f.select(:agents, options_from_collection_for_select(@agents, 'id', 'name'), {},{multiple: true, size: 10, :id => "agents"}) %>