我有一个Message模型,它具有以下关系:
belongs_to :sender, Class: "User"
belongs_to :recipient, Class: "User"
在某些情况下,我试图使用class_eval覆盖收件人方法。
这有效:
def update_recipient(message, recipient_addition = nil)
message.class_eval <<-EVAL
def recipient
"test"
end
EVAL
end
message.recipient =&gt; “测试”
然而,这不是:
def update_recipient(message, recipient_addition = nil)
message.class_eval <<-EVAL
def recipient
[#{message.recipient}, #{recipient_addition}]
end
EVAL
end
(eval):3: syntax error, unexpected keyword_end, expecting ']'
答案 0 :(得分:1)
第一个#
被误解为注释字符,丢弃了该行的其余部分。 #{}
预计将在双引号内插入,但似乎没有理由将它们放在#{}
中,因为它们只是简单的字符串值。
["#{message.recipient}", "#{recipient_addition}"]
......除非你计划的事情如下:
["To: #{message.recipient}", "CC: #{recipient_addition}"]