有没有更优雅的方式在Ruby中编写它,可能使用循环?
def save_related_info
update_column(:sender_company_name, user.preference.company_name)
update_column(:sender_address, user.preference.address)
update_column(:sender_telephone, user.preference.telephone)
update_column(:sender_email, user.preference.email)
update_column(:sender_url, user.preference.url)
update_column(:sender_vat_number, user.preference.vat_number)
update_column(:sender_payment_details, user.preference.payment_details)
end
感谢您的帮助。
答案 0 :(得分:3)
您是否有任何理由不使用update_attributes
一次完成所有操作?
def save_related_info
update_attributes(
:sender_company_name => user.preference.company_name,
:sender_address => user.preference.address,
:sender_telephone => user.preference.telephone,
:sender_email => user.preference.email,
:sender_url => user.preference.url,
:sender_vat_number => user.preference.vat_number,
:sender_payment_details => user.preference.payment_details
)
end
答案 1 :(得分:2)
def save_related_info
%w[company_name address telephone email url vat_number payment_details]
.each{|s| update_column("sender_#{s}".to_sym, user.preference.send(s))}
end
答案 2 :(得分:1)
首先猜测是将密钥和值放在列表中,然后使用循环。像这样的东西:
keys = ['key1', 'key2', 'key3', 'key4']
values = [val1, val2, val3, val4]
keys.each_index do |i|
update_column(keys[i], values[i])
end
这种方法的减少是values
数组中元素的顺序应该适合键的顺序。你可以避免使用哈希而不是数组。代码将如下所示:
data = { "key1" => val1, "key2" => val2, "key3" => val3 };
data.each do |key, value|
update_column(keys, values)
end