Я только что обратился к стековому потоку от друга, который помог мне с проблемой, с которой я столкнулся. Я довольно новичок в ruby on rails и работаю над совместным проектом, в котором у нас есть сценарий (medal_worker.rb), который планируется запускать через определенные промежутки времени, чтобы награждать людей различными медалями на основе различного участия и успеха на нашем сайте. Одна из новых медалей, над которыми я работаю, награждает людей за «вехи». Для решения этой проблемы, скажем, мы хотим дать им медали, когда они делают 100, 1000 и 10000 комментариев. Я хотел бы сделать это, используя named_scopes из модели User (user.rb), чтобы получить отфильтрованные списки пользователей, которых я ищу.
Мой вопрос таков: как мне найти пользователей, у которых нет соответствующих медалей для соответствующего уровня комментариев этапа (предпочтительно с использованием named_scopes из модели User)?
Вот выдержка из моего файла 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
Вот где я нахожусь с named_scopes в пользовательской модели (user.rb):
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 или как я передаю аргументы или что. Благодарю.