现在我正在尝试调用我的模型,并将其结果吐出为json / xml格式。我唯一的问题是,我的数据库关联没有被加载或查询。
通常,我可以运行这个
@campaign = Campaign.find(:all)
然后通过@campaign[0].hits
致电has_many :hits
获取点击次数。
但是如果你调试输出,它只调用表上的列。你会如何将它与你的查询放在一起?
例如:
<campaign> <category>website</category> <created-at type="timestamp">2009-01-24 14:49:02 -0800</created-at> <end-at type="date">2009-01-24</end-at> <id type="integer">14</id> <is-watched type="integer">1</is-watched> <name>Lets</name> <slug>c5334415da5c89384e42ce6d72609dda</slug> <start-at type="date">2009-01-24</start-at> <user-id type="integer">5</user-id> </campaign>
然后让它改为添加另一列,但是有点击次数。
<campaign> <category>website</category> <created-at type="timestamp">2009-01-24 14:49:02 -0800</created-at> <end-at type="date">2009-01-24</end-at> <id type="integer">14</id> <is-watched type="integer">1</is-watched> <name>Lets</name> <slug>c5334415da5c89384e42ce6d72609dda</slug> <start-at type="date">2009-01-24</start-at> <user-id type="integer">5</user-id> <hits type="integer">123412</hits> </campaign>
答案 0 :(得分:7)
ActiveRecord find()系列采用:include选项,允许您急切加载关联。
所以你需要做的就是:
@campaign = Campaign.find(:all, :include =&gt; :命中)
以上将急切加载您的数据库调用,以便访问每个索引[0]。 [1]等不会发出自己的SELECT调用。当你打电话
@campaign [0] .to_json
然后它不会包含任何关联,例如“命中”,那么你还需要:将它包含在to_json调用中,例如
@campaign [0] .to_json(:include =&gt;:hits)
答案 1 :(得分:1)
您可以通过在广告系列模型中添加hits_count字段来实现您想要的效果。添加新关联后,这将自动更新。
在ActiveRecord Associations文档
中查看counter_cache