我想根据Railscast #213(修订版)中的示例为我们的会员制作每个月的生日日历。每个成员在不同的位置都有一个birth_date 和 has_many 成员资格。
为了解决这个问题,我想我会按地点、日期和月份对每个成员的生日进行哈希处理。然后我可以遍历当前月份并提取当天生日的每个人的名字。
从成员索引控制器
@members = current_org
.members.joins(:memberships)
.where("memberships.location_id = #{params[:location_id]}")
.find_by_sql("SELECT members.*, EXTRACT(DOY FROM birth_date) as yday FROM children ORDER BY yday, first_name")
然后创建哈希
@member_birthday = @members.group_by { |m| "#{m.birth_date.day}-#{m.birth_date.month}" }
我遇到的第一个问题是 activerecord 查询返回每个成员并忽略 where 子句。第二个问题是如果我返回一个数组,day 方法不起作用。第三,我能得到正确顺序的唯一方法是EXTRACT DOY
在 find_by_sql 里面放一个。
有没有办法在 rails 3.1 中的 activerecord 中执行此操作并摆脱 find_by_sql?有没有另一种快速的方法来完成这个?