如何在运行时检索rails 3.2.12中存储在字符串变量中的关系的对象?

时间:2013-03-11 14:31:07

标签: ruby ruby-on-rails-3

假设有模型customeraccountaddress

class Customer
  has_many :accounts
end

class Account 
  belongs_to :customer
  has_many :addresses
end

class Address
  belongs_to :account
end

给定一个对象地址,其客户可以检索为:

customer = address.account.customer

现在让我们将关系存储在字符串变量address_relation = 'account.customer'中。给定一个address对象,是否可以使用字符串变量customer检索其address_relation,如:

customer = address.address_relation

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我会做类似

的事情
customer = address.address_relation.split(".").inject(address) do |object, method| 
  object.send(method)
end

如果您的关系链中存在nil对象,则可以将send切换为try

答案 1 :(得分:1)

我不确定我是否正确理解了这个问题,但我猜你可以使用Ruby的send方法动态解决模型关系。

object  = customer
methods = "account.customer".split(".")

methods.each do |m|
  object = object.send(m)
end