簡體   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