如何将字符串插值代码传递给 Rails 应用程序模板代码块?



根据 Rails 应用程序模板,这是将 Ruby 代码写入文件的方式:

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

但是,当我尝试在<<-CODECODE之间添加包含字符串内插的代码时,它在第一次出现时失败。

我的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:inapplyfirst_nameRails::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

相关内容

  • 没有找到相关文章

最新更新