0

我想根据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?有没有另一种快速的方法来完成这个?

4

1 回答 1

2

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

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

于 2013-09-05T03:27:04.770 回答