通过 YAML 文件中的循环在 Rails 中动态生成灯具
Dynamically generate fixtures in Rails via loop in YAML file
我想避免大量的 boilerplate/copying 和粘贴,以及数据库模式由表、外键等构成的方式,我应该能够做这样的事情:
#simplified example
<% ["offense", "defense", "special_teams"].map do |position|%>
home_<%=position%>_player:
game: 1
team: buckeyes
player: home_<%=position%>_player #uses fixture label for association
division: northeast
season: "2015"
<%=position%>_stat: home_<%=position%>_stat #uses fixture label for association
away_<%=position%>_player:
game: 1
team: hokies
player: away_<%=position%>_player
division: southeast
season: "2015"
<%=position%>_stat: away_<%=position%>_stat
<% end %>
我试过在 IRB 会话中加载它,但无济于事。例外是
Psych::SyntaxError: (<unknown>): mapping values are not allowed in this context at line 5 column 26
这让我想知道我所做的是否是有效的 YAML。
事实证明,上述 YAML 是有效的,但它必须以不同于标准 YAML 文件的方式加载:
YAML::load(ERB.new(File.read(PATH_TO_FILE)).result)
我在“YAML with erb is not parsing”中发现了正确的加载逻辑,但想添加这个答案,因为我找不到任何使用 for
以外的循环机制的示例,并且内插到这个程度。
我想避免大量的 boilerplate/copying 和粘贴,以及数据库模式由表、外键等构成的方式,我应该能够做这样的事情:
#simplified example
<% ["offense", "defense", "special_teams"].map do |position|%>
home_<%=position%>_player:
game: 1
team: buckeyes
player: home_<%=position%>_player #uses fixture label for association
division: northeast
season: "2015"
<%=position%>_stat: home_<%=position%>_stat #uses fixture label for association
away_<%=position%>_player:
game: 1
team: hokies
player: away_<%=position%>_player
division: southeast
season: "2015"
<%=position%>_stat: away_<%=position%>_stat
<% end %>
我试过在 IRB 会话中加载它,但无济于事。例外是
Psych::SyntaxError: (<unknown>): mapping values are not allowed in this context at line 5 column 26
这让我想知道我所做的是否是有效的 YAML。
事实证明,上述 YAML 是有效的,但它必须以不同于标准 YAML 文件的方式加载:
YAML::load(ERB.new(File.read(PATH_TO_FILE)).result)
我在“YAML with erb is not parsing”中发现了正确的加载逻辑,但想添加这个答案,因为我找不到任何使用 for
以外的循环机制的示例,并且内插到这个程度。