有没有办法让这两个常数变干?只有措辞和船只不同,是否可以用参数改变它,所以最后,我只有一个常数?
BILLING_ADDRESS_MAPPING = {
first_name: :bill_first_name_c,
last_name: :bill_last_name_c
}
SHIPPING_ADDRESS_MAPPING = {
first_name: :ship_first_name_c,
last_name: :ship_last_name_c
}
稍后将使用它们中的每一个:
ship_address = Address.new
SHIPPING_ADDRESS_MAPPING.each do |rails_attr, sugar_attr|
ship_address.send(:"#{ rails_attr }=", sugar_opportunity.send(sugar_attr))
end
ship_address.save
答案 0 :(得分:1)
ruby中的常量不允许动态更改更改。但是如果你将address_mapping保持为常数,那么肯定有一个解决方法:
def address_mapping(type)
address_mapping = {
first_name: "#{type}_first_name_c".to_sym,
last_name: "#{type}_last_name_c".to_sym
}
return address_mapping
end
这是您的方法,您可以将“结算”或“发货”作为字符串传递,结果应该是您想要的。
现在你应该使用它:
ship_address = Address.new
address_mapping("shipping").each do |rails_attr, sugar_attr|
ship_address.send(:"#{ rails_attr }=", sugar_opportunity.send(sugar_attr))
end
ship_address.save
如果我理解错了,请告诉我。希望它有所帮助:)