【问题标题】:Rails: ActiveRecord and send; how do I set an activerecord instance's relation with only knowing the class names?Rails:ActiveRecord 和发送;如何只知道类名来设置 activerecord 实例的关系?
【发布时间】:2011-08-22 16:09:50
【问题描述】:

所以我正在遍历我所有的 AR 并动态设置它们的关系...所以我知道我有 SomeObject 并且它属于 ManyObjects...我想做这样的事情:

an_object.some_relation = related_object
an_object.save

有没有办法通过 send 或类似的方法来做到这一点?这当然行不通:

an_object.send(some_relation_name, related_object)

这行得通,我只是想以一种不那么危险、更符合 Rails 元的方式来做:

an_object.update_attributes({"#{some_relation_name}_id"=>related_object.id})

【问题讨论】:

    标签: ruby-on-rails ruby activerecord metaprogramming


    【解决方案1】:

    你可以的

    an_object.send("#{some_relation_name}=", related_object)
    

    这只是动态调用setter方法。

    或者你可以降低一点并使用:

    an_object.reflect_on_association(some_relation_name).build_association(related_object_attributes)
    

    我会选择第一个,有时使用 send 有点“可怕”,但这就是 ruby​​ 的全部意义所在,动态编程。

    【讨论】:

    • 完美...我并不总是理解 = 符号可以是 setter 字面名称的一部分
    • reflect_on_association 是一个类方法。
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2016-02-21
    相关资源
    最近更新 更多