Ruby on rails 更新mongoid中的嵌入文档

Ruby on rails 更新mongoid中的嵌入文档,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我有一个嵌入供应商的简单投标模型: class Bid include Mongoid::Document field :amount, type: Integer embeds_one :supplier accepts_nested_attributes_for :supplier end 许多投标都有相同的供应商。如果我使用的是脚手架编辑视图,我将如何在更新方法中更新投标中嵌入供应商的所有实例 我试过,但没有成功 def update @supplier.update

我有一个嵌入供应商的简单投标模型:

class Bid
  include Mongoid::Document
  field :amount, type: Integer
  embeds_one :supplier
  accepts_nested_attributes_for :supplier
end
许多投标都有相同的供应商。如果我使用的是脚手架编辑视图,我将如何在更新方法中更新投标中嵌入供应商的所有实例

我试过,但没有成功

def update
  @supplier.update(supplier_params)
  #or
  #bids = Bid.where('supplier._id' => @supplier.id)
  #bids.supplier.update_attributes!(supplier_params)
  redirect_to @supplier
end
由于您正在使用,您应该能够通过传递
supplier\u属性
来更新嵌套记录

Bid.find(1).update(supplier_attributes: { foo: 'bar' } )
要将嵌套参数列入白名单,请使用哈希选项:

params.require(:bid).permit(supplier_attributes: [:foo])
要生成使用
字段\u的表单字段

<%= form_for(@bid) do |f| %>
  <%= f.fields_for(:supplier) do |s| %>
    <%= s.label :foo do %>
      <%= s.text_field :foo %>
    <% end %>
  <% end %>
<% end %>


您所说的
是什么意思?
我如何更新投标中嵌入供应商的所有实例?-这个问题没有意义,因为您有
嵌入关系。因此,更新投标永远不能更新多个供应商。这是mongoid,而不是活动记录?mongoid中的文档链接是正确的,错误的,但嵌套属性的工作方式与AR中几乎完全相同。我不认为mongoid 4和6之间的嵌套行为有很大区别,但v6文档确实很糟糕。是的,我试着跟着那些,但我不能得到正确的格式。在供应商更新方法中,实际的更新行是什么样子的?取决于-如果操作类似于
PATCH bids/:bid_id/supplier
,它只用于更新供应商,那么您只需找到带有
bid_id
参数的投标,并像其他任何操作一样使用参数更新
@bid.supplier
资源。如果您想在同一个请求中更新出价和供应商,那么除了白名单嵌套属性之外,您实际上不需要做任何特殊的事情。