在Rails has_one
关系中,如果关联名称存储在字符串中,如何构建名称以字符串形式保存的子对象?
例如,customer
has_one address
:
class Customer < ActiveRecord::Base
has_one :address
end
我们可以这样做:
customer = Customer.new
address = customer.build_address
如果关联保存在变量名称@association
中,我们如何使用变量address
创建@association
?:
@association = 'address'
customer = Customer.new
address = customer.build_{@association} #code does not work.
我们尝试了customer.build_"#{@association}" & 'customer.build_#{@association}
,但没有一个有效。
答案 0 :(得分:1)
您想要进行元编程,即在此处调用名称包含在变量中的方法。
您需要使用的Ruby方法是发送:
customer.send("build_#{association_name}")
您只能在双引号字符串中使用#{...}
语法".."
或正则表达式/../
请注意,send也适用于符号,您可以在第一个之后提供参数。请记住,=, [], !, ?
也是方法名称的一部分。
method= 'name=',
new_name= "hello"
@your_object.send(method, new_name)