我如何处理simple_form内的人身高?

问题描述:

我有一个Profile模型,它有一个height属性。我如何处理simple_form内的人身高?

我需要存储用户的高度(aka配置文件),但我不太确定如何去做。我认为最好的办法是以英寸(即4'0“,4'1”... 6'5“等)分解选择下拉菜单,但我不太确定最佳方式到其存储在数据库中。

我会以为这是最简单的,只是存储英寸,但如果我做我该如何呈现高度我在我上面指定的格式选择。

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

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

为什么不你有一个厘米领域和图像英寸转换成厘米。然后在模型中,您可以编写逻辑将其转换为英寸,如有必要 –

+0

@AmitBadhekaPykihStaff我不知道我理解您的建议。 “将英寸转换为厘米”的图像?这是什么意思? – marcamillion

你可以使用这个number field在保存用户的高度或更新用户的高度,你可以为用户提供一个选项,无论是选择它。您可以使用javascript or jquery在保存前转换为适当的单位,也可以使用before filter进行更新和创建操作。

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

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

+0

但是,这是怎么给我一个选择标签,显示在用户下拉菜单中的脚选项(即4'0“,4'1”,4'2“等),然后在提交时将其转换为英寸。我该怎么做? – marcamillion

+0

您可以使用java脚本或使用rails来创建select标签,您可以使用select_tag来实现此目的。 –

+0

你能否更新你的答案并提供一些建议,看看可能的样子?谢谢! – marcamillion

您可以创建具有价值和选项来选择选择框。

例如:数据库中值将是4.4,但在选择选项将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)是你的范围,你可以把这里的范围任何你想要的。

1.更改高低变量数据类型以厘米为单位浮动。

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 

下面是一个示例代码片段显示,这可能看起来的一种方式。如果将英寸整数值添加到select选项标签,则可以在保存操作时使用jQuery抓取它。

$(document).ready(function() { 
 
    $('#save').on('click', function(){ 
 
    \t alert($('#height').val()); 
 
    }); 
 
});
<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" />