根据 Rails 应用程序模板,这是将 Ruby 代码写入文件的方式:
file 'path/to/my_file.rb', <<-CODE
class Object
def not_nil?
!nil?
end
def not_blank?
!blank?
end
end
CODE
但是,当我尝试在<<-CODE
和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
:first_name
Rails::Generators::AppGenerator:0x00005557a8d85090 (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