如何在simple_form中处理人员身高?

时间:2016-09-26 06:15:07

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

我有一个Profile模型,它具有height属性。

我需要存储用户的高度(也就是个人资料),但我不太清楚如何做到这一点。我认为最好的方法是将选择下拉列表分解为英寸(即4'0“,4'1”...... 6'5“等)。但我不太确定最好的方法将其存储在数据库中。

我认为最简单的存储英寸,但如果我这样做,我如何以我上面指定的格式在我的选择中显示高度。

现在,我只有一个整数字段:

<%= f.input_field :height, placeholder: "176", class: 'col-lg-9 form-control' %>

4 个答案:

答案 0 :(得分:1)

您可以使用number field。保存用户身高或更新用户身高时,您可以为用户提供在inches or cms中选择的选项。您可以在保存之前使用javascript or jquery转换为适当的单位,也可以使用before filter进行更新和创建操作。

您可以执行以下操作而不是text_field,甚至可以设置高度的最小值和最大值。

<%= f.number_field :height, placeholder: "176", class: 'col-lg-9 form-control' %>

答案 1 :(得分:1)

1.更改hieght变量数据类型以浮动为厘米。

2.显示英尺和英寸的下拉并在保存之前将其转换为厘米,反之则在显示存储数据之前。

在您看来

<select name=profile[height]>height
<option>4.1</option>
<option>4.2</option>
<option>4.3</option>
<option>4.4</option>
</select>

在你的控制器创建动作中:

@profile = Profile.new(profile_params)
@profile.height = @profile.height*30.48 #convert foot to centimeters
@profile.save

答案 2 :(得分:0)

您可以创建带有值和选项的选择框。

例如:数据库中的值为4.4,但select中的选项为4'4

 <% arr = (1..10).step(0.1).to_a.map{|k| k.round(1).to_s.sub(".", "'"), [k.round(1) ]  } %>

 <%= f.select :height, arr, placeholder: "176", class: 'col-lg-9 form-control' %>

(1..10)是你的范围,你可以把它放在任何你想要的范围内。

答案 3 :(得分:0)

以下是一个示例代码段,其中显示了这种方式。如果将英寸整数值添加到选择选项标记,则可以在保存操作时使用jQuery获取它。

&#13;
&#13;
$(document).ready(function() {
  $('#save').on('click', function(){
  	alert($('#height').val());
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select id='height'>
  <option value="72">6'0"</option>
  <option value="73">6'1"</option>
  <option value="74">6'2"</option>
  <option value="75">6'3"</option>
  <option value="76">6'4"</option>     
</select>
<input type="button" id="save" value="Save" />
&#13;
&#13;
&#13;