如何使用循环编写这个Ruby函数?

时间:2013-08-10 11:45:28

标签: ruby-on-rails ruby

有没有更优雅的方式在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

感谢您的帮助。

3 个答案:

答案 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