嵌套表未在Rails 4中更新

用户名

我正在尝试更新嵌套表单。客户端表已成功更新,但位置表未更新。而不是创建一个新的位置。你们有什么解决办法吗?我已经花了一天的时间。

我的模特:

class Client < ActiveRecord::Base
  has_many :locations, :dependent => :destroy

  accepts_nested_attributes_for :locations, :allow_destroy => true, :update_only => true
end

class Location < ActiveRecord::Base
  belongs_to :client
end

Selectcom::Application.routes.draw do
  resources :clients
end

我的控制器:

class ClientsController < ApplicationController

  before_action :set_client, only: [:edit, :update]

  def index
    @clients = Client.paginate(page: params[:page])
  end

  def new
    @client = Client.new
  end

  def create
    @client = Client.new(client_params)

    if @client.save
      flash[:success] = "Client added successfully"
      redirect_to clients_path
    else
      render 'new'
    end
  end

  def edit
  end

  def update
    if @client.update(only_client_params)
      flash[:success] = "Job updated successfully"
      redirect_to clients_path
    else
      render 'edit'
    end
  end

  private

  def set_client
    @client = Client.find(params[:id])  
  end

  def client_params
    params.require(:client).permit(
      :name,
      :phone,
      :fax,
      :url,
      :address,
      :city,
      locations_attributes: [
        :site,
        :fax,
        :phone,
        :url,
        :address,
        :_destroy
      ]
    )
  end
end

这是客户的edit.html.erb表单

<%= form_for(@client, class: 'form-horizontal') do |f| %>
  <%= render(partial: 'client_field', locals: {f: f}) %>

  <%= f.fields_for :locations do |l| %>
    <%= l.hidden_field :client_id, value: @client.id %>
    <%= l.hidden_field :_destroy %>
    <%= l.text_field :site, class: 'form-control' %>

  <% end %>
 <%= f.submit "Save", class: "btn lg-button" %>
<% end %> 
吉尔赫姆·佛朗哥(Guilherme Franco)

实际上,您在这里有两个问题。模型中的一个参数和控制器中允许的参数。让我们深入研究它们:

1)型号

与集合关联一起使用时,update_only选项将被忽略(这是您的情况),如Rails文档中所述:

对于一对一关联,此选项允许您指定在关联记录已存在时如何使用嵌套属性。通常,可以使用新的属性值集更新现有记录,也可以用包含这些值的全新记录来替换现有记录。

默认情况下,:update_only选项为false,并且嵌套属性仅在包含记录的:id值时才用于更新现有记录。否则,将实例化一条新记录并用于替换现有记录。

但是,如果:update_only选项为true,则无论是否存在:id,嵌套属性都将始终用于更新记录的属性。对于集合关联,该选项将被忽略。

因此,第一步将是删除Clientupdate_only选项,因为您位置具有关联(集合关联),因此它将被忽略has_many

class Client < ActiveRecord::Base
  has_many :locations, :dependent => :destroy

  accepts_nested_attributes_for :locations, :allow_destroy => true
end

2)控制器

您必须允许:id:locations_attributes阵列密钥由于update_only忽略了模型中选项,因此Rails需要参数来表明它是存在的记录,并且正在更新而不是创建记录。

您可以在client_params方法中使用以下命令解决您的问题(注意在id密钥中添加了:locations_attributes密钥):

def client_params
  params.require(:client).permit(
    :name,
    :phone,
    :fax,
    :url,
    :address,
    :city,
    locations_attributes: [
      :id, # Should be present; otherwise, Rails thinks that is a new record
      :site,
      :fax,
      :phone,
      :url,
      :address,
      :_destroy
    ]
  )
end

希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4嵌套表单未在参数中传递嵌套属性

来自分类Dev

Rails 4嵌套表单未在参数中传递嵌套属性

来自分类Dev

嵌套形式的输入未在rails中显示

来自分类Dev

Rails 4中的嵌套表单未在视图中呈现

来自分类Dev

在Rails 4中更新模型

来自分类Dev

Rails 4更新嵌套属性

来自分类Dev

更新Rails 4的嵌套属性

来自分类Dev

ngModel 未在 *ngFor Angular 4 中更新

来自分类Dev

为什么表未在mysql中更新

来自分类Dev

Rails 4中的Ajax请求更新值

来自分类Dev

Rails 4中的Ajax无法更新内容

来自分类Dev

(Laravel4)更新表中的行?

来自分类Dev

Rails 4,更新嵌套的多态资源

来自分类Dev

如何更新嵌套资源Rails 4

来自分类Dev

Rails 4-显示嵌套记录表,垂直格式

来自分类Dev

未定义的方法“已更新?” 对于HasOneAssociation,对于Rails 4中的嵌套属性

来自分类Dev

Rails 4. jQuery,Acts_as_list,嵌套模型,更新控制器中的位置

来自分类Dev

Rails 4. jQuery,Acts_as_list,嵌套模型,更新控制器中的位置

来自分类Dev

在rails4中以嵌套形式进行编辑更新操作时会遇到问题?

来自分类Dev

在Rails 4中创建一个嵌套的表单更新按钮

来自分类Dev

浅表副本未在嵌套JSON对象javascript中更新

来自分类Dev

嵌套属性未插入表Rails和AngularJS中

来自分类Dev

样式表,图像和javascript未在rails4的heroku服务器上加载

来自分类Dev

在Rails中以嵌套形式更新子对象

来自分类Dev

Rails 4-更新多个表条目

来自分类Dev

如何在Rails 4 HMT关联中的联接表中保存和更新属性?

来自分类Dev

如何在Rails 4 HMT关联中的联接表中保存和更新属性?

来自分类Dev

Rails ActiveRecord模型未在RSpec模型规范中更新

来自分类Dev

Rails ActiveRecord模型未在RSpec模型规范中更新

Related 相关文章

  1. 1

    Rails 4嵌套表单未在参数中传递嵌套属性

  2. 2

    Rails 4嵌套表单未在参数中传递嵌套属性

  3. 3

    嵌套形式的输入未在rails中显示

  4. 4

    Rails 4中的嵌套表单未在视图中呈现

  5. 5

    在Rails 4中更新模型

  6. 6

    Rails 4更新嵌套属性

  7. 7

    更新Rails 4的嵌套属性

  8. 8

    ngModel 未在 *ngFor Angular 4 中更新

  9. 9

    为什么表未在mysql中更新

  10. 10

    Rails 4中的Ajax请求更新值

  11. 11

    Rails 4中的Ajax无法更新内容

  12. 12

    (Laravel4)更新表中的行?

  13. 13

    Rails 4,更新嵌套的多态资源

  14. 14

    如何更新嵌套资源Rails 4

  15. 15

    Rails 4-显示嵌套记录表,垂直格式

  16. 16

    未定义的方法“已更新?” 对于HasOneAssociation,对于Rails 4中的嵌套属性

  17. 17

    Rails 4. jQuery,Acts_as_list,嵌套模型,更新控制器中的位置

  18. 18

    Rails 4. jQuery,Acts_as_list,嵌套模型,更新控制器中的位置

  19. 19

    在rails4中以嵌套形式进行编辑更新操作时会遇到问题?

  20. 20

    在Rails 4中创建一个嵌套的表单更新按钮

  21. 21

    浅表副本未在嵌套JSON对象javascript中更新

  22. 22

    嵌套属性未插入表Rails和AngularJS中

  23. 23

    样式表,图像和javascript未在rails4的heroku服务器上加载

  24. 24

    在Rails中以嵌套形式更新子对象

  25. 25

    Rails 4-更新多个表条目

  26. 26

    如何在Rails 4 HMT关联中的联接表中保存和更新属性?

  27. 27

    如何在Rails 4 HMT关联中的联接表中保存和更新属性?

  28. 28

    Rails ActiveRecord模型未在RSpec模型规范中更新

  29. 29

    Rails ActiveRecord模型未在RSpec模型规范中更新

热门标签

归档