gpt4 book ai didi

ruby-on-rails - 如何在不实际保存更改的情况下完成 update_attributes

转载 作者:行者123 更新时间:2023-12-01 08:17:41 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Rails update_attributes without save?



从根本上说,我想做一个 ActiveRecord“update_attributes”,同时让 ActiveRecord 更改挂起。有没有办法做到这一点?如果你想知道我为什么想要这个,请继续阅读。

我有一个由三部分组成的表单:一个静态部分(相互独立的文本字段),一组选择(随着条目的填写而增长),以及一个显示选择对一组相关对象的影响的部分。更改选择需要往返服务器以确定效果,并且某些选择会影响 future 选择的选择。这些选择被建模为来自基本模型的 has_many 关联。例如。 (注意 [] 条目指定 HTML-SELECTs)
Include [section]
Exclude [subsection]
Exclude [subsection]
Include [section]
Exclude [subsection]
...

我已将表单设置为典型的嵌套属性表单。 When a selection is changed, I post back the fields with AJAX such that I'm getting the typical params hash (e.g. params[:basemodel][associated_models_attributes][0][:field_name]).我想把它放到一个未保存的 ActiveRecord 中,这样我已经用来生成原始页面部分的部分可以用来生成 JS 响应(我为此使用了一个 js.erb 文件)。使用 Basemodel.new(params[:basemodel]) 给出错误
"ActiveRecord::RecordNotFound (Couldn't find AssociatedModel with ID=1 for Basemodel with ID=)

发生这种情况(我认为)是因为来自现有关联记录(在当前记录中具有非空白 ID)的 ID 与将从"new"调用生成的空白 ID 不匹配。

我可以做一些非常笨拙的事情并创建一些看起来像 ActiveRecord 的东西(至少足以满足我的部分要求)但我不得不认为这是一个足够常见的问题,有一个很好的解决方案。

最佳答案

取决于 ActiveRecord::Persistence#update_attributes 的来源

# File activerecord/lib/active_record/persistence.rb, line 127
def update_attributes(attributes)
# The following transaction covers any possible database side-effects of the
# attributes assignment. For example, setting the IDs of a child collection.
with_transaction_returning_status do
self.attributes = attributes
save
end
end

您可以使用以下方法为模型分配属性
model.attributes = attributes

其中属性是模型字段等的散列。

关于ruby-on-rails - 如何在不实际保存更改的情况下完成 update_attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6544065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com