0

我基本上是将一个对象信息复制到另一个对象。一般来说,代码或方法可能不是经过深思熟虑的,但这不是我现在的问题。

这是错误:

syntax error, unexpected '=', expecting keyword_end
    original.send("#{attribute}") = edited.send("#{attribute}")
                                   ^

我正在做的是遍历 object2 的所有属性,然后将每个属性“复制”到对象 1。我可以为每个模型指定这个,但我想要一个单独的 implement_changes 方法,它基本上适用于每个类. 复制模型 belongs_to :edited 和 :original 通过多态关联。

class Copy < ActiveRecord::Base
    def implement_changes
      original = self.original_type.constantize.find(original_id)
      edited = self.edited_type.constantize.find(edited_id)
      accessible_attributes = original_type.constantize.accessible_attributes.to_a.select{|a| a != "slug"}
      accessible_attributes.shift
      accessible_attributes.each do |attribute|
          original.send("#{attribute}") = edited.send("#{attribute}")
      end
      original.save!
    end

为什么那个块不起作用?我不明白。这里发送的用法正确吗?它不会让我做 original.attribute。

任何帮助表示赞赏!:)

4

2 回答 2

3

setter 的方法名称包括等号,并将新值作为参数。你可以试试:

original.send("#{attribute}=", edited.send(attribute))

于 2013-04-11T22:47:41.477 回答
1

您是否有理由不使用ActiveResource::Base#dup

于 2013-04-12T02:38:09.513 回答