寻找干燥装置的方法。 我们假设我们有一些data.yml。那里有一个部分,可以从$ LABEL中引用。这是一个exapmle:
DEFAULTS: &DEFAULTS
state: $LABEL
score: 99
one:
<<: *DEFAULTS
uuid: <%= ActiveRecord::FixtureSet.identify(:one, :uuid) %>
two:
<<: *DEFAULTS
uuid: <%= ActiveRecord::FixtureSet.identify(:two, :uuid) %>
有没有办法干它。我想要这样的东西:
DEFAULTS: &DEFAULTS
state: $LABEL
score: 99
uuid: <%= ActiveRecord::FixtureSet.identify($LABEL, :uuid) %>
one:
<<: *DEFAULTS
two:
<<: *DEFAULTS
但这不可能,因为这里没有评估$ LABEL。有什么建议吗?
答案 0 :(得分:0)
我一直在为同样的问题苦苦挣扎,并且真的不想只为少数情况下切换到工厂,这会有所帮助。
话虽如此,看起来uuid不是你的主键,是这样吗?如果你能够将uuids作为主键(我们现在在Postgres中执行此操作),那么实际上不需要你正在做的事情,因为Rails将正确识别id上的关联。您可以尝试在模型类本身上设置primary_key
以使用uuid列,因为fixture会反思应该工作并避免需要评估$ LABEL并将其干掉。
答案 1 :(得分:0)
抱歉,在替换$LABEL
之前处理ERB标记。
您可以在ActiveRecord中看到字符串替换:
在我的情况下,我在主键创建下面的第663行快速编写了另一个方法,这意味着我可以在我的YAML文件而不是$PRIMARY_KEY
中使用$LABEL
。
# interpolate the primary key
row.each do |key, value|
row[key] = value.gsub("$PRIMARY_KEY", row[primary_key_name].to_s) if value.is_a?(String)
end
显然不是一个长期的解决方案,而是留在这里以防有人发现它有用。