加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Rails根据日期输入自动填充表单字段

发布时间:2020-12-16 21:02:44 所属栏目:百科 来源:网络整理
导读:我有一个Rails 3.2.18应用程序,在我的表单中我有一个年龄(int)和出生日期(datetime)的字段.我将使用一个简单的jQuery日期选择器来选择DOB. 这就是我想要发生的事情. 第一个字段是DOB(出生日期).我想选择它,并且一旦它被选中,我想计算年龄并根据该选择自动填
我有一个Rails 3.2.18应用程序,在我的表单中我有一个年龄(int)和出生日期(datetime)的字段.我将使用一个简单的jQuery日期选择器来选择DOB.

这就是我想要发生的事情.

第一个字段是DOB(出生日期).我想选择它,并且一旦它被选中,我想计算年龄并根据该选择自动填充年龄字段.

我想我可以通过在模型上创建一个计算年龄的方法来实现它,但我不确定如何在年龄字段中填充它.也许是一些Javascript或什么?

任何帮助将不胜感激.

下面是我为另一个应用程序编写的方法,该方法根据DOB计算年龄并可以在视图中使用:

def age(dob)
    now = Time.zone.now.to_date
    now.year - patient_dob.year - ((now.month > patient_dob.month || (now.month == patient_dob.month && now.day >= patient_dob.day)) ? 0 : 1)
  end

解决方法

您建议的内容不可能在Ruby中完成.你可以使用JavaScript.

如果没有首先前往服务器,计算年龄,然后将结果呈现给客户端,则无法根据用户输入计算年龄.该模型不知道用户输入的日期;这是,除非你提交表格,当然.

可以通过Ajax提交表单.例如,某些网站允许您填写邮政编码,然后他们会为您预先填写地址.真正发生的是,在幕后,浏览器向返回地址的服务器发送ajax请求.

在您的情况下,您不必这样做,因为在JavaScript中计算年龄非常容易.在客户端上执行此操作也更快,因为它可以节省您到服务器的往返.

看一下$('#date_input').on('change',function () { date = $(this).val(); age = getAge(date); $('#age_input').val(age); }); # This is taken directly from this answer: https://stackoverflow.com/a/7091965/276959 function getAge(dateString) { var today = new Date(); var birthDate = new Date(dateString); var age = today.getFullYear() - birthDate.getFullYear(); var m = today.getMonth() - birthDate.getMonth(); if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { age--; } return age; }

4/calculate-age-in-javascript”>this answer,它将向您展示如何根据输入日期计算人员年龄.

如果您使用Rails,您可能会使用jQuery.在这种情况下,您可以执行以下操作:

$('#date_input').on('change',function () {
  date = $(this).val();
  age = getAge(date);
  $('#age_input').val(age);
});

# This is taken directly from this answer: https://stackoverflow.com/a/7091965/276959
function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

然后,在服务器上,您可能希望在将数据保存到数据库之前重新计算年龄.这是因为没有什么能阻止用户直接提交虚假年龄.通过填写,或通过改变DOM.

class Person
  before_save :set_age

private

  def set_age
    self.age = # Calculate age here.
  end
end

See this answer关于如何使用Ruby计算年龄,看起来与您在问题中的代码相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读