gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:44 28 4
gpt4 key购买 nike

我有一个 Rails 3.2.18 应用程序,在我的表单中有一个字段用于年龄 (int) 和出生日期 (datetime)。我将使用一个简单的 jQuery 日期选择器来选择 DOB。

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

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

我想我可以通过在模型上创建一个计算年龄的方法来以某种方式做到这一点,但我不确定如何在年龄字段中填充它。也许是一些 Javascript 之类的东西?

如有任何帮助,我们将不胜感激。

下面是我为另一个基于 DOB 计算年龄的应用程序编写的方法,可以在 View 中使用:

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 中计算年龄非常容易。在客户端执行此操作也更快,因为它节省了往返服务器的时间。

看看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 计算年龄,它看起来与您在问题中的代码相同。

关于ruby - Rails 根据日期输入自动填充表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23828931/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com