Ruby 如何在运行时检索rails 3.2.12中字符串变量中存储了关系的对象?
假设有Ruby 如何在运行时检索rails 3.2.12中字符串变量中存储了关系的对象?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,假设有客户、账户和地址: 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\u rel
客户
、账户
和地址
:
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\u relation='account.customer'
中。给定一个地址
对象,是否有方法使用字符串变量地址关系
检索其客户
,如:
客户=地址。地址与关系
谢谢您的帮助。我不确定我是否正确理解了这个问题,但我想您可以使用Ruby的方法来动态解决模型关系
object = customer
methods = "account.customer".split(".")
methods.each do |m|
object = object.send(m)
end
我不确定我是否正确理解了这个问题,但我想您可以使用Ruby的方法来动态解决模型关系
object = customer
methods = "account.customer".split(".")
methods.each do |m|
object = object.send(m)
end
我会做类似的事情
customer = address.address_relation.split(".").inject(address) do |object, method|
object.send(method)
end
如果您的关系链中可能有一个nil对象,您可以通过尝试切换发送
,我会这样做
customer = address.address_relation.split(".").inject(address) do |object, method|
object.send(method)
end
你可以通过尝试切换发送
,如果你的关系链中可能有一个nil对象是的,这实际上是一个比我更好的例子。我正在编辑代码片段以将其转换为递归函数,但使用inject/reduce实际上更加精确。@user938363inject
位于标准ruby库中。假设你有一个a1,a2,a3。。。物体。对名为f
的块使用inject
相当于调用f(f(f(base,a1),a2),a3)…
。对于集合的每个成员,将调用该块并将其作为参数1/上一次调用的返回值2/当前项iteredbase
用于第一次调用,此时还没有以前的返回值。是的,这实际上是一个比我更好的示例。我正在编辑代码片段以将其转换为递归函数,但使用inject/reduce实际上更加精确。@user938363inject
位于标准ruby库中。假设你有一个a1,a2,a3。。。物体。对名为f
的块使用inject
相当于调用f(f(f(base,a1),a2),a3)…
。对于集合的每个成员,将调用该块并将其作为参数1/上一次调用的返回值2/当前项itered<当还没有以前的返回值时,code>base
用于第一次调用。