gpt4 book ai didi

ruby-on-rails - 如何从字符串中获取模型类?

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:04 25 4
gpt4 key购买 nike

我有一个名为 Todo.rb 的模型,它有一个名为“asset”的属性,它是一个字符串。该字符串包含模型的名称,例如 CallEmail 等。

它们还包含一个asset_id,这是Asset在ActiveRecord中的具体记录。

如何从 Todo 记录中分配给实际 ActiveRecord 类的 asset

=> #<Todo id: 165, created_at: "2010-11-04 00:49:45", updated_at: "2010-11-04 00:49:45", contact_id: 49, user_id: 1, asset: "Call", asset_id: 2, original_date: "2010-11-18", current_date: "2010-11-18", done_date: nil>

据此,我希望 asset 相当于:

 asset = Call.find(2)

我从概念上理解这可能是单表继承的情况,但我不清楚如何以及我想从用例中构建它。

最佳答案

我明白你想在这里做什么,而且有一种更简单的方法可以做到这一点。这叫做多态性。您希望待办事项能够属于不止一种类型的事物 - 有时是电话,有时是电子邮件,等等。好消息是,你已经很接近了。设置方法如下。

在您的迁移中,将“asset”字段重命名为“asset_type”:

rename_column :todos, :asset, :asset_type

现在将其添加到您的模型中:

class Todo < ActiveRecord::Base
belongs_to :asset, :polymorphic => true
end

class Call < ActiveRecord::Base
has_many :todos, :as => :asset
end

class Email < ActiveRecord::Base
has_many :todos, :as => :asset
end

在属于许多不同类型对象的类中,您有一个 asset_type 字符串列和一个 asset_id 整数列。并且你指定它属于多态关联,如上所示。然后,在所有可以有很多待办事项的模型中,添加 :as => :asset 部分来告诉它 Rails 如何找到关联的待办事项。

这非常简单,现在它就像其他 has_many 一样工作。希望对您有所帮助!

更新:这是我写的一篇文章,不仅在模型级别,而且在整个站点的表单中说明了多态性:

http://kconrails.com/2010/10/19/common-addresses-using-polymorphism-and-nested-attributes-in-rails/

关于ruby-on-rails - 如何从字符串中获取模型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com