Rails制作生日日历

时间:2013-09-05 02:49:01

标签: ruby-on-rails postgresql railscasts

我想根据Railscast #213 (Revised)中的示例为每个月的会员制作生日日历。每个成员在不同的位置都有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方法不起作用。第三,我能正确获得订单的唯一方法是在{_ 1}}中放入find_by_sql。

有没有办法在activerecord的rails 3.1中执行此操作并摆脱find_by_sql?还有另一种快速的方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

我相信您的“find_by_sql”会覆盖您正在构建的关系中的其他所有内容,而不是在那里调用find_by_sql,重新构建您的查询,如下所示:

current_org.select("members.*, EXTRACT(DOY FROM birthday_date").joins("membership on memberships.id = X").where(....)