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不在该类评估块的范围内。