在 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>">#<State:0x007f9f562fe368></option>
…
<option value="#<State:0x007f9f563124a8>">#<State:0x007f9f563124a8></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" %>
我正在使用 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>">#<State:0x007f9f562fe368></option>
…
<option value="#<State:0x007f9f563124a8>">#<State:0x007f9f563124a8></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" %>