3

人間の身長のドロップダウンが必要です。たとえば、5'2、5'3、5'4 などです。できれば 4'0 から 8'0 のようなものです。宝石やプラグインはありますか?見つからないようです。

4

4 に答える 4

3

おそらく、とにかくインチで保存するので、@heights次のように options_from_collection_for_select に渡すように生成できます。

(56..112).to_a.map { |inch| { id: inch.to_s, name: (inch/12).floor.to_s+'\''+(inch%12).to_s } }

おそらく、インチから文字列への変換がヘルパー メソッドに分割されています。

于 2012-04-19T10:27:46.813 に答える
2

これが最善の方法かどうかはわかりませんが、次のようなことを試すことができます

@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タグに入れる:

<%= select_tag "Height", options_from_collection_for_select(@heights,'value','name'), html_options = { :onChange=> "height_changed();"} %>
于 2012-04-19T07:09:59.613 に答える
0

コリンの答えは、私をそこへの道のりの一部にしました:

<%=
  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' 
%>

ビューでは、ドロップダウン メニューは次のように表示されます。

高さドロップダウン

HTML は次のようにレンダリングされます。

<select id="height" name="height_select">
<option value="{:id=>&quot;36&quot;, :name=>&quot;3'0\&quot;&quot;}">{:id=&gt;"36", :name=&gt;"3'0\""}</option>
<option value="{:id=>&quot;37&quot;, :name=>&quot;3'1\&quot;&quot;}">{:id=&gt;"37", :name=&gt;"3'1\""}</option>
<option value="{:id=>&quot;38&quot;, :name=>&quot;3'2\&quot;&quot;}">{:id=&gt;"38", :name=&gt;"3'2\""}</option>
....

高さだけを表示するように、コレクトを追加し、何を表示するか (名前) を指定しました。また、デフォルト値 (user_height) も指定しました。

<%= 
  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' 
%>

高さドロップダウンレオ

HTML レンダリング:

<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>

これが最も効率的なソリューションかどうかはわかりませんが、うまくいきます。

ここにいくつかの関連ドキュメントがあります。

于 2016-05-20T19:45:29.250 に答える