表单无法使用 mongoid 1-n 引用创建新的子对象

Form fails to create new child object with mongoid 1-n reference

所以,我有两种形式来创建对象。我可以用 name 创建和 Owner。现在,我想创建一个带有 nameListing 并将其分配给 Owner。当我没有设置 1-n 关系时,我可以创建一个新的 Listing,但是当我有 Listing belongs_to :owner 时,该表格不再有效。

型号:

class Owner
  include Mongoid::Document
  has_many :listings

  field :name, type: String

end


class Listing
  include Mongoid::Document
  belongs_to :owner

  field :name, type: String

end

表格:

<%= form_for @listing do |f| %>
  <div class="form-group">
    <%= f.label :name, "Listing Name" %>
    <%= f.text_field :name, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :listing, "Owner" %>
    <%= f.collection_select :owner_id, Owner.all, :id, :name, prompt: true %>
  </div>
    <%= f.submit class: "btn btn-primary" %>    
<% end %>

控制器:

def new
    @listing = Listing.new
end

def create
    @listing = Listing.new(listing_params)

    if @listing.save
        redirect_to @listing, notice: "Listing Creation >> SUCCESS" and return
    end
    render :new
end



private

    def listing_params
      params.require(:listing).permit(:name, owner_attributes: [:name])
    end

我的表单正确生成,因为我让字段输入名称和每个 Owner 的下拉列表,但表单不会创建新的 Listing。我不明白,因为当我删除 has_manybelongs_to 关系时,表单和对象创建工作正常。

请记住,我对此非常陌生:)

谢谢!

这里需要做一些改动:

表格:

<%= form_for @listing do |f| %>
  ...
  <div class="form-group">
    <%= f.label :owner, "Owner" %>     # :owner instead of :listing
    <%= f.collection_select :owner_id, Owner.all, :id, :name, prompt: true %>
  </div>
  ...
<% end %>

控制器:

def create
  @listing = Listing.new(listing_params)

  if @listing.save
    redirect_to @listing, notice: "Listing Creation >> SUCCESS" and return
  else
    render :new
  end
end

private

def listing_params
  params.require(:listing).permit(:name, :owner_id)
end

如果 create 请求不起作用,请还原并添加 rails 日志。