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