在mongoid中更新嵌入式文档

时间:2017-02-19 18:52:51

标签: 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(supplier_params)
  #or
  #bids = Bid.where('supplier._id' => @supplier.id)
  #bids.supplier.update_attributes!(supplier_params)
  redirect_to @supplier
end

1 个答案:

答案 0 :(得分:2)

由于您使用的是nested attributes,因此您应该能够通过传递supplier_attributes来更新嵌套记录。

Bid.find(1).update(supplier_attributes: { foo: 'bar' } )

要将嵌套参数列入白名单,请使用哈希选项:

params.require(:bid).permit(supplier_attributes: [:foo])

要生成表单字段,请使用fields_for

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