Tag: 多态关联

自定义收集路由的polymorphic_path

我有以下路线定义: resources :documents do collection do post :filter end end 以及以下模型结构: class Document true end class User :documentable end 和控制器结构: class DocumentsController < ApplicationController def index # not important end def filter # not important end end 我可以轻松地在一个视图中说: polymorphic_path([@user, Document]) 获取路径/ users / 1 / documents ,但我希望能够说: filter_polymorphic_path([@user, Document]) 不幸的是,获取路径/ users / 1 / documents […]

多态控制器和调用对象

我有一个多态关系,地址既可以由成员拥有,也可以由依赖者拥有。 一切都看起来很棒,直到我意识到我不知道什么类型的物体正在创造它,除非我遗漏了什么。 有没有办法告诉路由文件包含对象的类型? 楷模: class Member < ActiveRecord::Base has_one :address, as: :person, dependent: :destroy end class Dependent < ActiveRecord::Base has_one :address, as: :person, dependent: :destroy end class Address < ActiveRecord::Base belongs_to :person, polymorphic: true end 控制器: def new @person = ??? @address = Address.new(person: @person) end 目前路线: resources :members do resources :addresses, shallow: true resources […]

与Rails / ActiveRecord的多态habtm关系

我将如何创建与Rails / ActiveRecord的多态has_and_belongs_to_many关系? 我看到的大多数示例都涉及创建belongs_to关系,该关系将我的多态性限制为仅与一个父级相关: 表:任务 表:Tasks_Targets 表:CustomerStore 表:SoftwareSystem 在这种情况下,CustomerStore和SoftwareSystem都将属于“Targetable”类型。 根据我的理解,如果我实现大多数示例所示的多态关系,我只能将Targetable与任务关联一次 。 一些澄清可能有所帮助,因为大多数在线搜索仍然留下这种关系背后的一些理论无法解释…… 谢谢!

我应该联合索引ActiveRecord多态关联吗?

我有一个我希望非常大的度量表。 它具有多态关联,因此它可以属于想要记录某些度量的其他模型。 我通常索引像这样的关联列来加速关联加载。 我听说有人在谈论联合索引这种关联 。 这看起来像: add_index :comments, [:commentable_type, :commentable_id] 但我也听到过反对创建低基数指数的建议 ,因为指数的收益并没有抵消维持指数的开销。 由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。 我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。 这是你会做/推荐的吗?

渴望在ActiveRecord中加载多态关联

这是我第一次使用Rails,我想知道是否可以在一个SQL查询中加载一个多态关联? 它们之间的模型和关联足够基本:资产模型/表可以通过多态关联引用内容(图像,文本或音频),即 class Asset true 结束 图像,文本,音频定义如下: class Image :content 结束 当我尝试加载图片时,请这样说: Image.first( :conditions => {:id => id}, :include =>:asset ) 它指定了两个查询,一个用于检索Image,另一个用于检索资产(FYI,如果我指定了:joins ,也会发生这种情况)。 根据我的理解,ActiveRecord这样做是因为它不知道Image和Asset之间存在一对一的关联。 有没有办法强制连接并一次检索2个对象? 我也尝试使用自定义选择连接,但我最终必须手动创建ActiveRecord模型及其关联。 ActiveRecord是否提供了这样做的方法?

如何避免多态关联

鉴于你必须实现像社交网络中看到的那样的新闻源,ex facebook。 目前我正在使用一个具有多态关联的News类,它可以是Image,Comment,Friendship,GroupMembership等任何类型。每当创建一个Object时,也会创建新闻。 它与AR(ActiveRecords)一起正常工作,但是当我切换到DM(DataMapper)或Sequel时,我会遇到麻烦,因为它们都不会直接支持多态关联并阻止它的使用。 一种解决方法是使用带有大量UNION的大型SQL子句来合并所有应被视为新闻的不同表。 但这有一些缺点,特别是性能会很糟糕。 所以我想知道如何在没有多态关联的情况下解决,同时仍然获得良好的性能而没有其他缺点,比如有可能在新闻中添加元数据?

RoR成就系统 – 多态协会和设计问题

我试图在Ruby on Rails中设计一个成就系统,并且遇到了我的设计/代码。 试图使用多态关联: class Achievement true end class WeightAchievement :achievable end 迁移: class CreateAchievements true t.timestamps end create_table :weight_achievements do |t| t.integer :weight_required t.references :exercises, :null => false t.timestamps end … #code end 然后,当我尝试下面的抛弃unit testing时,它会失败,因为它表示该成就为空。 test “parent achievement exists” do weightAchievement = WeightAchievement.find(1) achievement = weightAchievement.achievement assert_not_nil achievement assert_equal 500, weightAchievement.weight_required assert_equal achievement.name, “Brick […]

在分配不同角色时,通过Rails进行操作

我正在尝试在地址和旅行之间建立关系,我不确定如何建立关系。 每次旅行都有两个地址:起始地址和结束地址。 地址可以在许多不同的旅行中使用,它们可以是起始地址或结束地址,具体取决于旅行。 我设想的是,当用户创建新旅行时,他们可以从他们所有地址的下拉菜单中进行选择,这样他们就可以从他们的地址(称为“家”)到他们的地址(例如“机场”)进行旅行。 “ 地址(可定位)与应用程序中的其他模型之间已经建立了多态关系,但在这种情况下,相同的地址需要属于两个不同的模型(用户和旅程)。 多态连接表是一个很好的解决方案吗? 即使这确实解决了问题,一旦你将两个不同的地址连接到旅行,那么区分起始地址和结束地址的最佳方法是什么? 谢谢你的任何建议! 编辑:我已经通过hakunin实现了以下所有内容,但我仍然找不到制作function的方法。 我决定使用fields_for为每个Trip构建TripLocation对象,但我无法弄清楚要放入控制器的内容。 当我把: def new @trip = Trip.new @trip.origin_trip_location.build @trip.destination_trip_location.build end 我得到undefined method build for nil:NilClass的错误undefined method build for nil:NilClass 。 我正在考虑使用@trip.trip_location.build但后来我得到错误的undefined method trip_locations for #因为在Trip模型中没有说has_many :trip_locations 。 通过使用常规的has_many :trip_locations我已经能够使用表单助手fields_for :trip_locations输入连接表中所需的所有信息,并说出一个Trip has_many :trip_locations ,但是我没有方法可以查询和查找哪个address将连接表中的布尔值设置为true,将其设置为false。 如果我能解决问题,我想,我会全力以赴。

Rails Polymorphic has_many

使用Ruby on Rails,我如何实现多态has_many关系,其中所有者始终是已知的,但关联中的项将是某些多态(但同质)类型,由所有者中的列指定? 例如,假设Producer类has_many产品,但生产者实例可能实际上有许多Bicycles,或Popsicles或Shoelaces。 我可以轻松地让每个产品类(Bicycle,Popsicle等)与Producer有一个belongs_to关系,但是给定一个生产者实例,如果它们的类型不同(每个生产者实例),我如何获得产品集合? Rails多态关联允许生产者属于许多产品,但我需要这种关系是另一种方式。 例如: class Bicycle < ActiveRecord::Base belongs_to :producer end class Popsicle < ActiveRecord::Base belongs_to :producer end class Producer :type # last part is made-up… end 所以我的Producer表已经有一个“类型”列,它对应于某个产品类(例如Bicycle,Popsicle等)但是我如何让Rails让我做一些像: >> bike_producer.products #=> [Bicycle@123, Bicycle@456, …] >> popsicle_producer.products #=> [Popsicle@321, Popsicle@654, …] 对不起,如果这是显而易见的或常见的重复; 我很难轻易实现它。

ActiveRecord :: EagerLoadPolymorphicError:无法急切加载多态关联

class Transaction true end class Bankaccount :account end class Creditcard :account end 尝试对帐户处于活动状态的交易进行总结。 Transaction.sum(:all, :conditions => “account.status = ‘active'”, :include => :account) 所以经过一些阅读后我发现了这个:原因是父模型的类型是一个列值,因此它的相应表名不能放在该查询的FROM / JOIN子句中。 表名是bankaccounts和creditcards,这是否意味着它们应该是单数的? 另外,account_type是一个字符串Bankaccount或Creditcard来反映模型,但它应该是tablename吗?