问题:Ruby(和/或 Rails)中是否有一种简洁的方法可以将两个对象合并在一起?
具体来说,我试图找出类似于 jQuery 的$.extend()
方法的东西,而您传入的第一个对象的属性将被第二个对象覆盖。
我正在使用 Rails 3.2+ 中的无表模型。当表单提交发生时,提交的参数用于动态填充用户对象。该用户对象使用 Ruby 的 PStore 类在页面请求之间持久化,将对象编组为平面文件,以便将来轻松检索。
相关代码:
module Itc
class User
include ActiveModel::Validations
include ActiveModel::Conversion
include ActionView::Helpers
extend ActiveModel::Naming
def set_properties( properties = {} )
properties.each { |k, v|
class_eval("attr_reader :#{k.to_sym}")
self.instance_variable_set("@#{k}", v)
} unless properties.nil?
end
end
end
用户对象的创建过程如下:
user = Itc.User.new( params[:user] )
user.save()
上面的save()
方法不是ActiveRecord的save方法,而是我写的通过PStore做持久化的方法。
如果我加载了一个用户对象,并且我有一个表单提交,我想做这样的事情:
merged = existingUserObject.merge(User.new(params[:user])
并具有merged
成为用户对象的结果,仅更新表单提交中更改的属性。
如果有人对总体上更好的方法有任何想法,我会全神贯注。