- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想知道 ActiveRecord::Associations::CollectionProxy
之间的区别和 ActiveRecord::AssociationRelation
.
class Vehicle < ActiveRecord::Base
has_many :wheels
end
class Wheel < ActiveRecord::Base
belongs_to :vehicle
end
如果我这样做:
v = Vehicle.new
v.wheels # => #<ActiveRecord::Associations::CollectionProxy []>
v.wheels.all # => #<ActiveRecord::AssociationRelation []>
我不知道它们之间有什么区别,为什么要这样实现?
最佳答案
ActiveRecord::Relation
是在转换为查询并执行之前的简单查询对象,另一方面,CollectionProxy
稍微复杂一些。
首先你得到关联扩展,你可能看到了类似这样的东西,假设一个有很多书的书店模型
class Store < ActiveRecord::Base
has_many :books do
def used
where(is_used: true)
end
end
end
这样你就可以使用如下所示的语法调用商店中的旧书
Store.first.books.used
但这是最基本的用途,你可以使用集合代理中暴露给你的属性,它们是owner
、reflection
和target
owner
提供对持有关联的父对象的引用
reflection
对象是 ActiveRecord::Reflection::AssocciationReflection
的实例,包含关联的所有配置选项。
target
是关联集合对象(或者当has_one
和belongs_to
时是单个对象)。
使用这些方法,您可以在您的关联扩展中设置一些条件,例如,如果我们有一个博客,我们会向管理员用户授予对所有已删除帖子的访问权限(我知道的蹩脚示例)
Class Publisher < ActiveRecord::Base
has_many :posts do
def deleted
if owner.admin?
Post.where(deleted: true)
else
where(deleted: true)
end
end
end
end
您还可以访问另外两个方法,它们是 reset
和 reload
,第一个 (reset
) 清除缓存的关联对象,第二种 (reload
) 更常见,用于重置
,然后从数据库加载相关对象。
我希望这能解释CollectionProxy
类为何如此有用
关于ruby-on-rails - CollectionProxy 与 AssociationRelation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683555/
我正在尝试理解 CollectionProxy暴露在 nHibernate 中。它只是 ICollection 的扩展以返回列表集合吗?如果是这样,为什么要使用代理模式? 最佳答案 您正在观察的是 V
我想知道 ActiveRecord::Associations::CollectionProxy 之间的区别和 ActiveRecord::AssociationRelation . class Ve
我需要在后台标记一组消息(我正在使用 delay_job gem),因为在前台需要一些时间。所以我创建了一个 ActiveJob类(class)MarkMessagesAsReadJob ,并通过了
我使用了模态 class School [:taggings => [:tag]]).map{|i| i.subject} 但我没有得到主题列表,而是得到了 [# 最佳答案 我也遇到过类似的问题。
我有模型order.rb class Order 保存订单时在线。当我注释掉时 has_many :attributes, dependent: :destroy, class_name:
我在 rails4 中有一个奇怪的错误,阻止我在 has_many 关联上链接“collect”。 我有 self has_many > 文件夹 然后 文件夹 has_many > share_lin
我使用事件记录 4(映射遗留数据库)设置了以下模型 class Page 17 page.content.second.content_id => 18 但是我希望能够像这样遍历所有项目 page.
我在遍历集合属性以获取值时遇到问题。 这是我的代理 , #]> 我希望能够像这样遍历代理中的所有对象。 my_collection_proxy.each do |c| c.name end 但这似乎不
假设我有模型 Topics 和 Posts,其中 Topic has_many :posts 和 Post belongs_to :topic。此时我的数据库中已经有了一些东西。 如果我进入 Rail
我有一个 has_many 主题的组模型。主题模型 has_many 帖子。我想为按 Post 属性 :published_on 排序的组创建所有主题的数组。 在我的群组展示页面上,我有 @group
正如标题所解释的,假设我有两个 ActiveRecord::Base 模型:SatStudentAnswer 和 ActStudentAnswer。 我有一个学生模型 has_many :act_st
我有以下关联: class Question :destroy has_many :surveys, :dependent => :delete_all belongs_to :input
我开始从 Rails 4.1.4 升级到 Rails 4.2.0。好像是第一!不再支持某些事件记录关联。 first!(在 ActiveRecord::Associations::Collection
我是一名优秀的程序员,十分优秀!