ruby-on-rails - 更新模型和 Child 删除 Grandchild :( Rails
问题描述
我有:
Initial_application.rb
has_one :full_application
has_one :statement, through: :full_application
accepts_nested_attributes_for :application_status
accepts_nested_attributes_for :full_application
完整应用程序.rb
has_one :statement
has_one :plaid_auth, through: :statement
语句.rb
has_many_attached :files
belongs_to :full_application, optional: true
所以我有 - initial_application - full_application(initial_application 的孩子) - 声明(full_application 的孩子,因此 initial_application 的孙子)
initial_application_controller.rb
def edit_full
respond_to do |format|
format.html
format.js
render layout: 'fullapplication_layout'
end
end
我在控制器中创建了一个操作来更新初始应用程序和 full_application。创建一个嵌套表单等,放入强大的参数等。
def initial_application_params
params.require(:initial_application).permit( :source, :amount, :years, :sales, :creditscore, :email, :name, :phone, :interest, :businessname, application_status_attributes: [:status, :person, :status_name, :status_description, :status_note], full_application_attributes: [:amount, :years, :sales, :creditscore, :email, :phone, :name, :defaults, :existingach, :acceptcc, :seasonal, :balance, :lender, :interest, :street, :apt, :city, :state, :zipcode, :businessname, :bstreet, :bapt, :bcity, :bstate, :bzipcode, :dba, :legalentity, :fedtaxid, :dob, :percentage, :own, :bown, :bphone, :analytics, :source, :credit_auth, :ip ] )
end
edit_full_form.erb
<%= simple_form_for @initial_application do |f| %>
...
<%= f.simple_fields_for :application_status do |p| %>
...
<% end %>
<%= f.simple_fields_for :full_application do |m| %>
...
<% end %>
<%= f.button :submit, "Update Status", class: "button is-medium" %>
<% end %>
但是当我使用嵌套形式更新 initial_application 和 full_application 时,它会删除语句。我想出了问题,但我不知道如何解决。
“更新”操作是创建新的 full_application 记录,而不是更新旧的 full_application。
解决方案
您的 full_aplication 记录正在重新创建,因为您没有通过它的id
. 正如文档所说:
对于每个没有键的散列,
id
将实例化一个新记录,除非散列还包含一个_destroy
计算结果为 的键true
。
要修复它,您需要在:id
允许的参数的嵌套列表中添加一个full_application_attributes
,并将该 ID 作为 hidden_field 传递给表单。
推荐阅读
- asp.net - 将一个 asp 标签放在另一个标签下,它们之间没有空格
- java - 当互联网改变其状态时,Android RxJava 会通知
- azure - 在 Batch 帐户和池上安装的证书不适用于任务
- docker - 将 Kafka 连接嵌入 Ksqldb-server 时挂载(卷)不起作用
- angular - 编译@angular/core时导入意外符号ɵɵinvalidFactory,如何解决?
- java - 为什么在数组列表数组上使用 Arrays.fill() 时会出现意外行为?
- protocol-buffers - grpc:无法解组收到的消息原型:错误的线型
- mysql - 如何在mysql中使用select生成表达式
- python - TypeError:只能连接str
- java - 尝试调用公共 API 时发生“java.net.UnknownHostException”