繁体   English   中英

Rails 4:find_or_initialize_by和条件默认值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM