【问题标题】:How do I handle person height within a simple_form?如何处理 simple_form 中的人高?
【发布时间】:2016-09-26 06:15:06
【问题描述】:

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

我需要存储用户的身高(又名个人资料),但我不太确定如何去做。我认为最好的方法是以英寸为单位的选择下拉列表(即 4'0"、4'1"...6'5" 等)。但我不太确定最好的方法将其存储在数据库中。

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

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

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

【问题讨论】:

  • 为什么没有一个厘米字段和一个将英寸转换为厘米的图像。然后在模型中,您可以编写逻辑以根据需要将其转换为英寸
  • @AmitBadhekaPykihStaff 我不确定我是否理解您的建议。 “将英寸转换为厘米的图像”?这到底是什么意思?

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


【解决方案1】:

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

您可以执行以下操作来代替text_field,您甚至可以设置高度的最小值和最大值。

&lt;%= f.number_field :height, placeholder: "176", class: 'col-lg-9 form-control' %&gt;

【讨论】:

  • 但这如何给我一个选择标签,在下拉菜单中向用户显示英尺选项(即 4'0"、4'1"、4'2" 等),然后提交时将其转换为英寸。我该怎么做?
  • 您可以使用 java 脚本或使用 rails 创建一个选择标签,您可以为此使用 select_tag。
  • 您能否更新您的答案,并提供一些关于可能看起来像什么的建议?谢谢!
  • 你不能设置一个选择标签,让它显示一条信息,但传递另一条信息。所以它显示 4'0" 但通过 48 - 等等
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这是一个示例代码 sn-p,它显示了它的一种外观。如果将英寸整数值添加到选择选项标签,则可以在保存操作时使用 jQuery 抓取它。

      $(document).ready(function() {
        $('#save').on('click', function(){
        	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" />

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多