我想根据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?还有另一种快速的方法来实现这一目标吗?
答案 0 :(得分:2)
我相信您的“find_by_sql”会覆盖您正在构建的关系中的其他所有内容,而不是在那里调用find_by_sql,重新构建您的查询,如下所示:
current_org.select("members.*, EXTRACT(DOY FROM birthday_date").joins("membership on memberships.id = X").where(....)