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

问题描述 投票:0回答:1

所以,我有两种形式来创建对象。我可以用Owner创建和name。现在,我想用Listing创建一个name并将其分配给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关系时,表单和对象创建工作正常。

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

谢谢!

ruby-on-rails mongodb forms mongoid
1个回答
0
投票

这里几乎没有变化:

形成:

<%= 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日志。

© www.soinside.com 2019 - 2024. All rights reserved.