我刚刚在这里的一位朋友提到了 stackoverflow,以帮助解决我遇到的问题。我对 ruby on rails 相当陌生,我正在开展一个协作项目,我们有一个脚本 (medal_worker.rb),该脚本计划以固定的时间间隔运行,根据我们网站上的各种参与和成功向人们授予各种奖牌。我正在制作的新奖章之一是奖励“里程碑”的人。对于这个问题,假设我们想在他们发表 100、1000 和 10000 条评论时给他们奖牌。我想通过使用用户模型(user.rb)中的 named_scopes 来为我提供我正在寻找的用户的过滤列表来做到这一点。
我的问题是:如何找到没有相应里程碑评论级别的相应奖牌的用户(最好使用用户模型中的 named_scopes)?
这是我的 model_worker.rb 文件的摘录:
def award_comment_milestone(comments)
users = Users.frequent_comment_club_members(comments).not_awarded_medal(Medal.find_by_id(medal.id))
for user in users do
award_medal(medal, nil, user) if @award
end
end
这是我在用户模型(user.rb)中使用 named_scopes 的位置:
named_scope :frequent_comment_club_members, lambda { |*args|
{:include => comment_records, :conditions => ['comment_records.comment_type = ? and comment_records.comments >= ?', 'User', (args.first || 0)]}
}
named_scope :not_awarded_medal, lambda { |medal|
{:include => :awards, :conditions => ['awards.medal_id not in (select awards.medal_id from awards where awards.medal_id = ?)", medal.id] }
}
这不像我想的那样工作,但我不知道问题是否出在 named_scopes 或我如何传递争论或什么。谢谢。