如何显示下拉列表的显示值而不是隐藏值

时间:2014-04-16 20:44:52

标签: ruby-on-rails simple-form simple-form-for

我已经向美国各州提交了每个州的全名和一个隐藏值作为缩写。当用户保存隐藏值(缩写)存储在数据库中时,我们将其返回到" show"动作。

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

我还尝试过readonly和disabled,但这两个都会呈现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 %>

2 个答案:

答案 0 :(得分:0)

在个人资料模型中定义一个方法,以显示州名。

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

在您的节目中,您只需要调用此方法来显示州的全名:

<%= @profile.state_name %>

答案 1 :(得分:0)

我通过创建另一个帮助方法解决了这个问题。 &#34;的get_value&#34;方法将获取字段的集合和隐藏值并返回可见值。首先将Collection转换为Hash,然后将隐藏值传递给index运算符,返回可见值。以下是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 %>