我已经向美国各州提交了每个州的全名和一个隐藏值作为缩写。当用户保存隐藏值(缩写)存储在数据库中时,我们将其返回到" 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 %>
答案 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 %>