Rails: ActiveRecord и отправка;Как установить отношение экземпляра activerecord, зная только имена классов? - PullRequest
5 голосов
/ 10 мая 2011

Итак, я перебираю все свои AR и устанавливаю их отношения динамически ... поэтому я знаю, что у меня есть SomeObject и что он принадлежит_OntoBjects ... Я хочу сделать что-то вроде этого:

an_object.some_relation = related_object
an_object.save

Есть ли способ сделать это через отправить или каким-либо подобным таким методом? Это, конечно, не работает:

an_object.send(some_relation_name, related_object)

Это работает, мне просто интересно сделать это менее опасным, более мета-рельсовым способом:

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

1 Ответ

15 голосов
/ 10 мая 2011

Ну, вы можете сделать

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

, который просто динамически вызывает метод установки.

Или вы можете пойти на более низкий уровень и использовать:

an_object.reflect_on_association(some_relation_name).build_association(related_object_attributes)

Я бы пошел с первым, немного «страшно» использовать send иногда, но в этом и заключается суть ruby, динамическое программирование.

...