Ruby 导轨的人体高度下拉列表
我需要一个人体高度的下拉列表,例如5'2,5'3,5'4,等等。最好是4'0到8'0。有gem或插件吗?我好像找不到。不确定这是不是最好的办法, 但是你可以试试这样的东西Ruby 导轨的人体高度下拉列表,ruby,plugins,ruby-on-rails-3.1,gem,Ruby,Plugins,Ruby On Rails 3.1,Gem,我需要一个人体高度的下拉列表,例如5'2,5'3,5'4,等等。最好是4'0到8'0。有gem或插件吗?我好像找不到。不确定这是不是最好的办法, 但是你可以试试这样的东西 @heights = (4..7).to_a.collect{|o| 0.upto(11).to_a.collect{|k| ["#{o.to_s+'\'' + k.to_s}",o.to_s + k.to_s]}}.inject([]){|s,v| s | v} 或者更好 @heights = (4..7).to_a.co
@heights = (4..7).to_a.collect{|o| 0.upto(11).to_a.collect{|k| ["#{o.to_s+'\'' + k.to_s}",o.to_s + k.to_s]}}.inject([]){|s,v| s | v}
或者更好
@heights = (4..7).to_a.collect{|o| 0.upto(11).to_a.collect{|k| ["#{o.to_s+'\'' + k.to_s}",o.to_s + k.to_s]}}.flatten(1)
这将产生如下结构:
[["4'0", "40"], ["4'1", "41"], ["4'2", "42"], ["4'3", "43"], ["4'4", "44"]] # and so on..
现在,要为选择选项准备此结构,可以使用:
@heights.map { |name, id| OpenStruct.new(:value => id, :name => name) }
这将为每个高度元素提供一个名称和值对,可用于为选择标记创建选项
您可能需要包含OpenStruct,因此请使用
require 'ostruct'
将其放入选择标记中:
<%= select_tag "Height", options_from_collection_for_select(@heights,'value','name'), html_options = { :onChange=> "height_changed();"} %>
“高度已更改();”}%>
您可能会以英寸为单位存储它,这样您就可以生成您的@heights
以将选项从\u集合\u传递给选项\u,例如:
(56..112).to_a.map { |inch| { id: inch.to_s, name: (inch/12).floor.to_s+'\''+(inch%12).to_s } }
也许是因为英寸到字符串的转换变成了一种辅助方法。这是人类身高的一块好宝石 写一个助手
def height
(121..244).to_a.collect{|k| ["#{Height.new(k).to_s(:default, :metric)}","#{Height.new(k).to_s(:default, :imperial)}","#{Height.new(k).feet}"]}
end
输出
[["1m 21cm", "4 ft 0 in", "4"], ["1m 22cm", "4 ft 0 in", "4"], ["1m 23cm", "4 ft 0 in", "4"], ["1m 24cm", "4 ft 1 in", "4.08"]
使用模板中的方法
<%= f.input :how_tall_are_you, label: "How tall are you ? (in feet and Cm)", collection: height.map { |cm, inc, value| ["#{cm} - #{inc}", "#{value}"] } ,prompt: "-Please select one-",input_html: { class: 'form-control input-lg', required: true} %>
科林的回答让我了解了其中的一部分:
<%=
n.select :height,
options_for_select((36..96).to_a.map { |inch|
{
id: inch.to_s,
name: (inch/12).floor.to_s+'\''+(inch%12).to_s+'"'
}
}),
{},
id: 'height'
%>
“36”,:name=>“3'0\”}>{:id=“36”,:name=“3'0\”}
只要一个小小的修正,你就会想除以12而不是14。@PaulPettengill,说得好。我想我一定是在想一块石头里的英镑。编辑。刚刚完成了一个巨大的项目,这帮了我很多忙!非常感谢!我应该除以12还是14?这是一个在加拿大使用的系统。对不起,我知道这是旧的@PaulPettengill@J奥帕洛莫塔12号,祝你好运!
<select id="height" name="height_select">
<option value="{:id=>"36", :name=>"3'0\""}">{:id=>"36", :name=>"3'0\""}</option>
<option value="{:id=>"37", :name=>"3'1\""}">{:id=>"37", :name=>"3'1\""}</option>
<option value="{:id=>"38", :name=>"3'2\""}">{:id=>"38", :name=>"3'2\""}</option>
....
<%=
n.select :height,
options_for_select(
(36..96).to_a.map { |inch|
{
id: inch.to_s,
name: (inch/12).floor.to_s+'\''+(inch%12).to_s+'"'
}
}.collect{ |p|
[p[:name],
p[:id].to_i]
},
user_height),
{},
id: 'height'
%>
<select id="height" name="height_select">
<option value="36">3'0"</option>
<option value="37">3'1"</option>
<option value="38">3'2"</option>
...
<option selected="selected" value="69">5'9"</option>
...
</select>