簡體   English   中英

如何將字符串插值代碼傳遞到Rails應用模板代碼塊?

[英]How to pass string interpolation code to Rails Application Template CODE block?

根據Rails應用程序模板,這是將紅寶石代碼寫入文件的方式:

file 'path/to/my_file.rb', <<-CODE
  class Object
    def not_nil?
      !nil?
    end

    def not_blank?
      !blank?
    end
  end
CODE

但是,當我嘗試添加在<<-CODECODE之間包含字符串插值的CODE ,它在第一次出現時失敗。

我的file呼叫:

file 'lib/person.rb', <<-CODE
# frozen_string_literal: true

class Person
  def initialize(first_name, last_name)
    @full_name = "#{first_name.capitalize} #{last_name.capitalize}#"
  end
end
CODE

錯誤信息:

template.rb:50:in apply :Rails :: Generators :: AppGenerator:0x00005557a8d85090的未定義局部變量或方法first_name (NameError)

我的理解是模板生成器嘗試執行內插的代碼。

我試過的只是將"雙引號"轉義,例如:

file 'lib/person.rb', <<-CODE
# frozen_string_literal: true

class Person
  def initialize(first_name, last_name)
    @full_name = \"#{first_name.capitalize} #{last_name.capitalize}#\"
  end
end
CODE

但它沒有幫助,導致完全相同的錯誤。

我該如何處理?

您正在嘗試將Heredoc 字符串插值一起使用,顯然在嘗試插值first_name失敗。 為防止heredoc字符串插值,請改用FOO<<-'CODE'

file 'lib/person.rb', <<-'CODE'
# frozen_string_literal: true

class Person
  def initialize(first_name, last_name)
    @full_name = "#{first_name.capitalize} #{last_name.capitalize}#"
  end
end
CODE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM