У меня есть такие модели:
Class User
has_many :comments
# have field 'name' in DB
end
Class Comment
belongs_to :user
end
И у меня очень сложный и очень сложный для понимания бэкэнд администратора, который получает все модели и позволяет управлять им из интерфейса администратора.Он получает все ассоциации и обрабатывает его с помощью evals.
И такой eval отлично работает:
eval("comment." + o[0][:object])
, где o [0] [: object] = "user.name"
Но я хочу сделать это без Eval.Этот подход работает, но он не очень универсален:
comment.send("user").send("name")
И в реальном коде он выглядит очень некрасиво:
(o[0][:object].split(".").count < 2) ? h(object.send(o[0][:object])) : h(object.send(o[0][:object].split(".")[0]).send(o[0][:object].split(".")[1]))
Итак, каков наилучший способ получить универсальность eval для таких конструкций?, если я хочу показать больше вложенных вызовов, например:
comment.user.first_friend.haters.count
???