根据Rails Application Templates,这是将红宝石代码写入文件的方式:
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:在
apply
中:Rails :: Generators :: AppGenerator:0x00005557a8d85090(NameError)的未定义局部变量或方法first_name
我的理解是模板生成器尝试执行内插的代码。
我尝试的只是将"
双引号转义,例如:
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
但没有帮助,导致完全相同的错误。
我该如何处理?
答案 0 :(得分:2)
您正在尝试将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