1

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

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 => "测试"

但是,这不会:

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 ']'
4

1 回答 1

1

第一个#被误解为注释字符,丢弃了该行的其余部分。预计#{}将在双引号内插入,尽管现在似乎没有理由将它们放入,#{}因为它们只是简单的字符串值。

["#{message.recipient}", "#{recipient_addition}"]

...除非您计划类似:

["To: #{message.recipient}", "CC: #{recipient_addition}"]
于 2012-07-30T11:33:57.867 回答