我可以像使用 new() 一样在一行中使用 find_or_initialize_by 后填充/更新新记录吗?
Can I Populate / update a new record after using find_or_initialize_by with one line like when using new()?
我正在更改某些功能,因此,我想使用 find_or_initialize_by
来替换 new
我的模式有 13 列
modal = Modal.new(col1: col1, col2: col2..... col13: col13)
新密码是:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
现在我需要填充或更新剩余的 11 列。
这可以在一条线上完成吗?我宁愿不写:
modal.col1 = col1
modal.col2 = col2
....
modal.col13 = col13
谢谢
您可以通过一个块来为新记录设置属性。当您想使用某些值创建它们并且不想覆盖现有记录时,这很有用。
modal = Modal.find_or_initialize_by(col1: col1, col3: col3) do |record|
record.col4 = col4
record.col5 = col5
# etc
end
你可以玩弄它的语法,使用 #attributes=
:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3) { |r| r.attributes = { col4: col4, col5: col5 } }
注意#attributes=
只会设置数值,需要手动保存。如果您使用 .find_or_create_by
而不是 .find_or_initialize_by
,它将在块执行后验证并保存新记录。
如果你想设置记录的属性,不管它是否是新的:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
modal.attributes = { col4: col4, col5: col5 }
您也可以使用 #update_attributes
,但您的记录将被验证并保存。
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
modal.update_attributes(col4: col4, col5: col5)
我正在更改某些功能,因此,我想使用 find_or_initialize_by
来替换 new
我的模式有 13 列
modal = Modal.new(col1: col1, col2: col2..... col13: col13)
新密码是:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
现在我需要填充或更新剩余的 11 列。
这可以在一条线上完成吗?我宁愿不写:
modal.col1 = col1
modal.col2 = col2
....
modal.col13 = col13
谢谢
您可以通过一个块来为新记录设置属性。当您想使用某些值创建它们并且不想覆盖现有记录时,这很有用。
modal = Modal.find_or_initialize_by(col1: col1, col3: col3) do |record|
record.col4 = col4
record.col5 = col5
# etc
end
你可以玩弄它的语法,使用 #attributes=
:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3) { |r| r.attributes = { col4: col4, col5: col5 } }
注意#attributes=
只会设置数值,需要手动保存。如果您使用 .find_or_create_by
而不是 .find_or_initialize_by
,它将在块执行后验证并保存新记录。
如果你想设置记录的属性,不管它是否是新的:
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
modal.attributes = { col4: col4, col5: col5 }
您也可以使用 #update_attributes
,但您的记录将被验证并保存。
modal = Modal.find_or_initialize_by(col1: col1, col3: col3)
modal.update_attributes(col4: col4, col5: col5)