ruby-on-rails - 合并两个 ruby 对象

标签 ruby-on-rails ruby

问题:在 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 的结果是一个用户对象,只更新在表单提交中更改的属性。

如果有人对总体上执行此操作的更好方法有任何想法,我会洗耳恭听。

最佳答案

Hash#merge 不是您要查找的内容吗? http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge .看来你可以走了

merged = existingUserObject.merge(params[:user])

我认为您不需要创建一个全新的 User 对象,因为这可能就是 existingUserObject 的意思,您只想覆盖一些属性。

关于ruby-on-rails - 合并两个 ruby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853491/

相关文章:

ruby-on-rails - Rails 4 - Yaml 配置文件

ruby-on-rails - 如何更改 Rails 中的默认单词?

参数在双括号中的 Ruby 方法

ruby-on-rails - mysql2 gem 无法构建原生扩展

ruby-on-rails - 使用 kaminari 对带有哈希参数的链接进行分页

mysql - rails 4 : how to use UNIX_TIMESTAMP with group YEAR

ruby - 在模块中设置新的类变量

ruby - 在不同环境中运行 Cucumber 测试

ruby - 遍历包含键/数组值对的散列,并遍历每个值

ruby-on-rails - 您可以编辑/更新也是嵌套属性的多态模型吗?