栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Rails 3-有条件的渴望加载

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Rails 3-有条件的渴望加载

添加一个新的关联

published_pages
(除了当前的关联之外)

class Category  has_many   :children,        :class_name => "Category",     :foreign_key => "parent_id"  has_many   :published_pages, :class_name => "Page",     :conditions  => { :is_published => true }end

现在,您可以获取所有类别,如下所示:

self.categories.includes(:children, :published_pages)

如果您有兴趣了解为什么您的方法行不通,请阅读Rails
文档(在本

Eagerloading of associations
节后滚动10-15行)。我在下面列出了相关的代码段:

例如

Post.includes([:author, :comments]).where(['comments.approved = ?',

true]).all

这将导致单个SQL查询的连接符合以下内容:

LEFT OUTER JOIN comments ON comments.post_id = posts.id andLEFT OUTER JOIN authors  ON authors.id = posts.author_id.

请注意,使用这样的条件可能会产生意想不到的后果。在上面的示例中,根本没有返回带有概念批准的注释的帖子,因为这些条件不仅适用于整个SQL语句,而且还适用于整个SQL语句。您必须消除列引用的歧义,以使此后备发生,例如::order
=>“ author.name DESC”将起作用,但:order =>“ name DESC”将不起作用。

要渴望加载关联的过滤行,请对条件使用关联:

class Post < ActiveRecord::base  has_many :approved_comments, :class_name => 'Comment',   :conditions => ['approved = ?', true]endPost.find(:all, :include => :approved_comments)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号