0

基本的に、あるオブジェクトの情報を別のオブジェクトにコピーしています。一般的に、コードまたはアプローチは最もよく考えられていない可能性がありますが、それは今のところ私の問題ではありません。

これはエラーです:

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

私がやっていることは、object2 のすべての属性をループしてから、それぞれをオブジェクト 1 に「コピー」することです。これを各モデルに固有にすることもできますが、基本的に各クラスで機能する単一の implement_changes メソッドが必要でした。 . コピーモデルは、ポリモーフィックアソシエーションを介して :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

なぜそのブロックが機能しないのですか?? 理解できません。send の使い方は正しいですか?original.attribute.

どんな助けでも大歓迎です!:)

4

2 に答える 2

3

セッターのメソッド名には等号が含まれ、新しい値を引数として取ります。あなたは試すことができます:

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

于 2013-04-11T22:47:41.477 に答える
1

ActiveResource::Base#dupを使用していない理由はありますか?

于 2013-04-12T02:38:09.513 に答える