2

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

谢谢你的帮助。

4

3 回答 3

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
于 2013-08-10T12:11:01.313 回答
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
于 2013-08-10T11:56:57.250 回答
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
于 2013-08-10T11:53:21.133 回答