ruby-on-rails – Ransack:使用年龄而不是出生日期

ruby-on-rails – Ransack:使用年龄而不是出生日期,第1张

概述我想使用ransack为用户构建一个高级搜索功能. 我有一个小方法来计算从出生日期开始的年龄: def age(dob) now = Time.now.utc.to_date now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)en 我想使用ransack为用户构建一个高级搜索功能.
我有一个小方法来计算从出生日期开始的年龄:

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

这适用于正常显示(如年龄(@ user.date_of_birth))

但是当使用search_form_for时,我不能这样做:

<%= search_form_for @search,url: search_users_path,method: :post do |f| %>    <div >        <%= f.label :date_of_birth_gteq,"Age between" %>        <%= f.text_fIEld :date_of_birth_gteq %>        <%= f.label :date_of_birth_gteq,"and" %>        <%= f.text_fIEld :date_of_birth_lteq %>    </div><div ><%= f.submit "Search" %></div> <% end %>

我的问题是:如何在搜索中使用年龄而不是出生日期?

解决方法 添加如下所示的范围以查找给定年龄的日期.

scope :age_between,lambda{|from_age,to_age|  if from_age.present? and to_age.present?    where( :date_of_birth =>  (Date.today - to_age.to_i.year)..(Date.today - from_age.to_i.year) )  end}

对于ransacke语法:

ransacker :age,:formatter => proc {|v| Date.today - v.to_i.year} do |parent|  parent.table[:date_of_birth]end

在视野中

<%= f.text_fIEld :age_gteq %>
总结

以上是内存溢出为你收集整理的ruby-on-rails – Ransack:使用年龄而不是出生日期全部内容,希望文章能够帮你解决ruby-on-rails – Ransack:使用年龄而不是出生日期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283366.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存