从根本上说,我想做一个 ActiveRecord “update_attributes”,同时让 ActiveRecord 更改处于待处理状态。有没有办法做到这一点?如果您想知道我为什么想要这个,请继续阅读。
我有一个由三部分组成的表单:一个静态部分(相互独立的文本字段),一组选择(随着条目的填写而增长),以及一个显示选择对一组相关对象的影响的部分。更改选择需要往返服务器以确定效果,并且某些选择会影响未来选择的选择。选择被建模为来自基本模型的 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 (eg 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)与“新”调用生成的空白 ID 不匹配。
我可以做一些非常笨拙的事情并创建一些看起来像 ActiveRecord 的东西(至少足以满足我的部分),但我必须认为这是一个足够普遍的问题,因此有一个很好的解决方案。