0

我有美国各州的下拉菜单,每个州的全名和一个隐藏值作为缩写。当用户保存隐藏值(缩写)存储在数据库中,我们在“显示”操作中返回它。

我可以创建一个辅助方法,但我还有一些类似问题的下拉菜单,这就是为什么要寻找一个更简单的解决方案。

我也尝试过只读和禁用,但是这两个都呈现 HTML 控件,这不是必需的:

profiles_helper.rb
def us_states
[     
  ['Alabama', 'AL'],
  ['Alaska', 'AK'],
  ['Arizona', 'AZ']     
]
end

我正在使用简单的形式:

_form.html.erb
<%= simple_form_for(@profile) do |f| %>
    <%= f.input :state, collection: us_states %>
<% end %>

我应该在 show.html.erb 中做什么来显示每个州的全名而不是缩写。有没有简单形式的东西?

show.html.erb
<%= @profile.state %>
4

2 回答 2

0

我通过创建另一个辅助方法解决了这个问题。“get_value”方法将获取字段的集合和隐藏值并返回可见值。集合首先转换为哈希,然后将隐藏值传递给索引运算符返回可见值。以下是 us_states 的代码,类似地,任何集合都可以传递给此方法以获取可见值:

profiles_helper.rb
def us_states
[     
  ['Alabama', 'AL'],
  ['Alaska', 'AK'],
  ['Arizona', 'AZ']     
]
end

def get_value(collection, hidden_value)
    hash = Hash[collection.map {|key, value| [value, key]}]
    hash[hidden_value]
end

_form.html.erb
<%= simple_form_for(@profile) do |f| %>
    <%= f.input :state, collection: us_states %>
<% end %>

show.html.erb
<%= get_value(us_states, @profile.state %>
于 2014-05-03T09:09:47.727 回答
0

在您的 Profile 模型中定义一个方法以带上 State 全名。

def state_name
  state = State.where("id= #{self.state}").first
  state.name
end

在您的节目中,您只需调用此类方法即可显示该州的全名:

<%= @profile.state_name %>
于 2014-04-16T21:31:20.523 回答