在 RoR 中,如何让我的对象的 name/id 在我的 select 菜单中呈现而不是对象本身?

In RoR, how do I get the name/id of my object to render in my select menu instead of the object itself?

我正在使用 Rails 4.2.3。我有以下帮助方法来获取美国各州……

  def us_states
    us_country = Country.find_by_iso('US')
    State.where(country_id: us_country.id)
  end

那么在我看来我有

<%= addr.select :state, us_states.collect {|s| [ s.name, s.id ] }, {prompt: 'Select State'}, class: "selectField selectMenu form-control" %>

然而,在我看来呈现的是

<select name="my_object[address][state]" id="my_object_address_state"><option value="">Select State</option>
<option value="#<State:0x007f9f562fe368>">#&lt;State:0x007f9f562fe368&gt;</option>
…
<option value="#<State:0x007f9f563124a8>">#&lt;State:0x007f9f563124a8&gt;</option></select>

如何让州的实际名称和 ID 显示在我的 select 标签中?

当我必须这样做时,我喜欢创建一个名为 "display_name"

的方法
<%= addr.select :state, us_states.collect {|s| [ s.display_name, s.id ] }, {prompt: 'Select State'}, class: "selectField selectMenu form-control" %>

现在在您的模型中您可以:

class Model < ActiveRecord::Base
  ...
  def display_name
    name.to_s + ' ' + id.to_s
  end
  ...
end

希望对您有所帮助

您缺少 options_for_select,将您的 select 更改为:

<%= addr.select :state, options_for_select(us_states.collect{|s| [ s.name, s.id ]}), {prompt: 'Select State'}, class: "selectField selectMenu form-control" %>