ruby-on-rails - 如何将字符串插值代码传递给 Rails 应用程序模板代码块?
问题描述
根据Rails Application Templates,这是将 ruby 代码写入文件的方式:
file 'path/to/my_file.rb', <<-CODE
class Object
def not_nil?
!nil?
end
def not_blank?
!blank?
end
end
CODE
但是,当我尝试在<<-CODE
and之间添加包含字符串插值的代码时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 : Rails::Generators::AppGenerator:0x00005557a8d85090 (NameError)的
apply
未定义局部变量或方法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
但它没有帮助,导致完全相同的错误。
我该如何处理?
解决方案
您正在尝试将 heredoc与字符串插值一起使用,这显然在尝试 interpolate 时失败了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
推荐阅读
- angular - 使用 NGRX 更新表单会返回 ViewDestroyedError
- linux - 在 /etc/hosts 中使用不同的规范或别名引用相同的 IP
- postgresql - 处理异常和事务
- reactjs - 反应路由器嵌套,一旦有参数就打开新页面
- javascript - 使用 Javascript 数组 sort() 方法和比较函数的字母搜索
- javascript - 从 JSON 子对象计算总和
- rascal - MouseDown 事件时的图形信息
- postgresql - 如何为具有“timestamptz”数据类型的 PostgreSQL 列设置 NULL 值?
- node.js - Express.js 的状态
- html - 如何垂直对齐一行中的元素