[英]Rails 4: find_or_initialize_by and conditional default values
我有一个建立像这样的关系的类:
def assign_vars
template_variables.each do |master|
@document.template_variables.find_or_initialize_by(
name: master.name, tag: master.tag, text: master.default_value)
end
end
end
这样就可以找到它是否已经存在,或者如果没有就可以构建。 我的问题是text: master.default_value
。 我想仅在建立新关系时设置该值,而不是对于使用find_or_initialize_by
找到的关系进行设置。 类似于text: text || master.default_value
text: text || master.default_value
我怎样才能在那个循环中写出来呢?
如果您研究
find_or_initialize_by
的实现,
def find_or_initialize_by(attributes, &block)
find_by(attributes) || new(attributes, &block)
end
您将看到它期望attributes
以及block
。 属性仅用于查找记录。 因此,您可以在新对象实例化时传递一个block
以初始化默认属性。
因此,要仅在未找到记录的情况下设置默认text
值,您可以尝试以下操作:
def assign_vars
template_variables.each do |master|
@document.template_variables.find_or_initialize_by(
name: master.name, tag: master.tag) do |t|
t.text = master.default_value
end
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.