Ruby on rails Rails制作生日日历

Ruby on rails Rails制作生日日历,ruby-on-rails,postgresql,railscasts,Ruby On Rails,Postgresql,Railscasts,我想根据中的示例为我们的会员每月制作一份生日日历。每个成员都有一个出生日期,并且在不同的地点拥有许多成员资格 为了解决这个问题,我想我会把每个会员的生日按地点、日期和月份进行分类。然后我就可以浏览当前月份,找出每个在那天过生日的人的名字 从成员索引控制器 @members = current_org .members.joins(:memberships) .where("memberships.location_id = #{params[:location_id]}") .fin

我想根据中的示例为我们的会员每月制作一份生日日历。每个成员都有一个出生日期,并且在不同的地点拥有许多成员资格

为了解决这个问题,我想我会把每个会员的生日按地点、日期和月份进行分类。然后我就可以浏览当前月份,找出每个在那天过生日的人的名字

从成员索引控制器

@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方法将不起作用。第三,我能得到正确顺序的唯一方法是在find_by_sql中放入一个摘录DOY


在activerecord的Rails3.1中有没有一种方法可以做到这一点,并摆脱find_by_sql?有没有其他快速方法可以实现这一点?

我相信您的“按sql查找”将覆盖您正在构建的关系中的所有其他内容,而不是在那里调用“按sql查找”,请按如下方式重新构造查询:


当前_org.selectmembers.*,从生日提取doy_date.joinsmembership on memberships.id=X.where…

谢谢。通过做一些修改,我可以得到你的建议:@members=current_org.members.selectmembers.*,EXTRACTDOY FROM birth_date为yday.joins:memberships.wherememberships.location_id={params[:location_id}.orderyday,它比我以前的查询快得多。另外,JHo,请注意,您正在使用where结构进行SQL注入。最好将参数作为数组传递到where,以便Rails能够正确地清理它们。像这样的模型。WHEREQUIRITE=?,params[:some_id]。