2009-10-06 65 views
1

我正在为Rails中的认知测试构建应用程序。
我有一些测试(Quiz对象)为我的访问者。在主页中,我只想显示可供消费的测验:他们必须有许多问题和一些可能的答案。
当然,我可以用SQL进行查询,或创建一个类方法,重试所有对象Quiz.questions.size > 1 && Quiz.answer.size > 1。 不过,我想要一个更优雅/抽象的方式。
有没有办法查询有一个'准备好'的方法,就好像它是一个ActiveRecord方法,所以我可以拨打Quiz.find_all_by_ready(1)并把ready在任何测验条件? 缓存是一种可能性,我想知道是否有一个动态的选择。一个铁轨专家如何解决这个问题?RoR中的计算字段(充当ActiveRecord方法)

干杯,
达维德

回答

3

使用named_scope和counter_caches的组合,你可以做这样的事情:

class Quiz < AR:B 
    named_scope :ready, :conditions => ['quizes.questions_count > 0 AND quizes.answers_count > 0'] 
end 

@quizes = Quiz.ready 

我希望这有助于!

+0

我想这是最直接的解决方案,谢谢! – nutsmuggler 2009-10-09 18:25:50