Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails嵌套属性:不更新选定字段_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails嵌套属性:不更新选定字段

Ruby on rails Rails嵌套属性:不更新选定字段,ruby-on-rails,Ruby On Rails,我使用Rails 5.1,并且我在存档表单中有一个嵌套属性,它在选择字段中显示多个硬盘: <%= form_with(model: archive, local: true, url: archive_path(@archive), method: :put) do |form| %> <div class="field"> <%= form.label :shelfmark %><br /> <%= form.t

我使用Rails 5.1,并且我在存档表单中有一个嵌套属性,它在选择字段中显示多个硬盘:

<%= form_with(model: archive, local: true, url: archive_path(@archive), method: :put) do |form| %>
  <div class="field">
      <%= form.label :shelfmark %><br />
      <%= form.text_field :shelfmark %>
  </div>

    <div class="field">
      <%= form.label "Harddisk" %><br />
      <%= form.select :harddisk_id, Harddisk.order(bezeichnung: :asc).collect {|a| [ a.label, a.id ] } %> 
    </div>
  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>
例如,当我选择id为2的硬盘时,它不会更新存档表上的harddisk_id属性。它仍然保留硬盘id:1而不是2

rails服务器日志:

   Started PATCH "/archives/5" for ::1 at 2018-02-09 13:52:10 +0100
Processing by ArchivesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"aas9eTl1Vb0JP+KHncyBKts7s1ZJD4l0jRz9wiNi3aiwwDYwkJbt9FXAy6T23sNYONJB1npoprvFtULReEKWIQ==", 
              "archive"=>{"shelfmark"=>"bar", "harddisk_attributes"=>

{"id"=>"1"}, "harddisk_id"=>"4"}, "commit"=>"Update Archive", "id"=>"2"}
      Archive Load (0.4ms)  SELECT  `archive`.* FROM `archive` WHERE `archive`.`id` = 2 LIMIT 1
   (0.3ms)  BEGIN
  Harddisk Load (0.5ms)  SELECT  `harddisks`.* FROM `harddisks` WHERE `harddisks`.`id` = 4 LIMIT 1
   (0.2ms)  ROLLBACK
现在它尝试更新硬盘id记录,但抛出错误:

ActiveRecord::RecordNotFound找不到的ID为1的硬盘 ID为2的存档:


如果您只是想更新:

archive.harddisk_id
并且不更新任何关联硬盘的属性:

archive.attribute.capacity
archive.attribute.created_at
archive.attribute.updated_at
这样,就不需要嵌套的_属性。因此:

解决方案 全部替换

form.fields\u用于:硬盘do。。。结束

…与

form.select:硬盘\u id

此外,您现在可以安全地删除嵌套的_属性的任何跟踪,因为您不再需要它们:

从控制器方法存档参数中删除硬盘属性 remove接受存档模型上的硬盘的\u嵌套\u属性。 这很可能意味着archive.harddisk是nil no value您说harddisk_id是一个归档属性,而不是harddisk属性?然后你不应该使用硬盘字段。选择:硬盘id。但是你可以使用硬盘字段。选择:id代替或使用表单。选择:硬盘id对不起,我错了:不要使用硬盘字段。选择:id而使用表单。选择:硬盘id。前者将尝试更新硬盘记录的id,但您不希望这样做,因为您希望更新存档记录的硬盘\u id。是的,如果您只是要更新存档.harddisk\u id,并且您不更新任何硬盘属性,即容量,则不需要form.fields\u,而不需要form\u。如果您删除了所有form.fields\u for:硬盘,则。。。结束并用form.text\u field:harddisk\u id替换它,您刚才提到的错误应该会消失。
archive.attribute.capacity
archive.attribute.created_at
archive.attribute.updated_at