Ruby 使用class_eval覆盖关联

Ruby 使用class_eval覆盖关联,ruby,ruby-on-rails-3,metaprogramming,Ruby,Ruby On Rails 3,Metaprogramming,我有一个具有以下关系的消息模型: belongs_to :sender, Class: "User" belongs_to :recipient, Class: "User" 在某些情况下,我试图使用class_eval覆盖recipient方法 这项工作: def update_recipient(message, recipient_addition = nil) message.class_eval <<-EVAL def recipient "tes

我有一个具有以下关系的消息模型:

belongs_to :sender, Class: "User"
belongs_to :recipient, Class: "User"
在某些情况下,我试图使用class_eval覆盖recipient方法

这项工作:

def update_recipient(message, recipient_addition = nil)
  message.class_eval <<-EVAL
    def recipient
      "test"
    end
  EVAL
end
def update_recipient(消息,收件人添加=nil)
message.class_eval第一个
#
被错误地解释为注释字符,丢弃了行的其余部分。
{}
应该在双引号中插入,尽管现在似乎没有理由把它们放在
{}
中,因为它们只是简单的字符串值

["#{message.recipient}", "#{recipient_addition}"]
。。。除非你在计划这样的事情:

["To: #{message.recipient}", "CC: #{recipient_addition}"]
第一个
#
被错误地解释为注释字符,丢弃了行的其余部分。
{}
应该在双引号中插入,尽管现在似乎没有理由把它们放在
{}
中,因为它们只是简单的字符串值

["#{message.recipient}", "#{recipient_addition}"]
。。。除非你在计划这样的事情:

["To: #{message.recipient}", "CC: #{recipient_addition}"]

在您看来,返回显示有用户对象的数组的最佳方式是什么?这些对象看起来是您要返回的对象,因此如果您想返回字符串值,请执行类似于
[message.recipient.email,recipient\u addition.email]
(假设它们具有电子邮件属性)的操作。如果要返回对象,只需通过
[message.recipient,recipient\u addition]
直接返回它们。不幸的是,recipient\u addition不在该类\u eval块的范围内。在您看来,返回显示有用户对象的数组的最佳方式是什么?这些看起来就是您要返回的对象,因此,如果要返回字符串值,请执行类似于
[message.recipient.email,recipient\u addition.email]
(假设它们具有电子邮件属性)。如果要返回对象,只需通过
[message.recipient,recipient\u addition]
直接返回它们。不幸的是,recipient\u addition不在该类评估块的范围内。