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 => "test"

ただし、これはしません。

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 に答える