块中出现意外的语法错误

时间:2013-04-11 22:43:35

标签: ruby-on-rails ruby-on-rails-3 syntax-error block send

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

这是错误:

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。

任何帮助表示赞赏! :)

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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