Zan*_*ndo 5 ruby activerecord metaprogramming ruby-on-rails
所以我正在迭代我所有的AR并动态设置它们的关系...所以我知道我有SomeObject并且它属于ManyObjects ...我想做这样的事情:
an_object.some_relation = related_object
an_object.save
Run Code Online (Sandbox Code Playgroud)
有没有办法通过发送或类似的方法来做到这一点?这当然不起作用:
an_object.send(some_relation_name, related_object)
Run Code Online (Sandbox Code Playgroud)
这是有效的,我只是想做一个不那么危险,更多Rails-meta方式:
an_object.update_attributes({"#{some_relation_name}_id"=>related_object.id})
Run Code Online (Sandbox Code Playgroud)
jes*_*iss 15
那么你可以做到
an_object.send("#{some_relation_name}=", related_object)
Run Code Online (Sandbox Code Playgroud)
这只是动态调用setter方法.
或者你可以降低一点并使用:
an_object.reflect_on_association(some_relation_name).build_association(related_object_attributes)
Run Code Online (Sandbox Code Playgroud)
我会选择第一个,有时使用send有点"可怕",但这就是ruby的全部,动态编程.