【问题标题】:How can I access to related object by string field name in Ruby on Rails ActiveRecord?如何在 Ruby on Rails ActiveRecord 中通过字符串字段名称访问相关对象?
【发布时间】:2016-04-28 10:22:00
【问题描述】:

通常当我们需要使用 ActiveRecord 相关对象时,我们会写这样的代码:

main_object.related_object

其中main_objectMainObject 类的实例,related_object 是通过related_object_id 字段连接到MainObjectRelatedObject 实例:

class MainObject < ActiveRecord::Base
     :has_one => :related_object
end

class RelatedObject < ActiveRecord::Base
     :belongs_to => :main_object
end

关系计数可能不同且不止一个。此外,我的任务假设我不知道将使用哪一种关系的自定义查询。

所以,我想通过它的名字来获取相关的对象,例如:

main_object.relations['related_object']

是否可以在 Ruby on Rails ActiveRecord 中使用?

【问题讨论】:

  • 我认为这似乎是多态性,但在反向....在我看来,目前仅使用 rails 是不可能的,因为为了生成正确的查询 rails 不知道名称关联模型
  • 但是你能解释一下这个任务吗,你不知道关系的模型名称,或者你不知道固定的关系名称?
  • 是的,我不知道固定的关系名称模型可以有多个关系,不同的情况会使用不同的关系

标签: ruby-on-rails activerecord relationship


【解决方案1】:

您可以使用public_send

main_object.public_send(:related_object)

【讨论】:

  • 谢谢,但public_send对关系没有帮助:(
  • 是的,确实如此。 has_many belongs_to e.t.c 只是将实例方法添加到类的类方法。
  • 哦,对不起。它有效,我第一次用错了 - 用方括号代替圆。但是感谢我的错误,我找到了答案中描述的另一个解决方案!
【解决方案2】:

ActiveRecord 对象有association 方法返回名称的关联信息。 它返回包含target 方法的ActiveRecord::Associations::* 类实例:

association = main_object.association :related_object
association.target # returns RelatedObject instance that I wanted

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2022-07-22
    • 2022-01-15
    • 2023-03-17
    • 2012-05-02
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多