表单无法使用 mongoid 1-n 引用创建新的子对象
Form fails to create new child object with mongoid 1-n reference
所以,我有两种形式来创建对象。我可以用 name
创建和 Owner
。现在,我想创建一个带有 name
的 Listing
并将其分配给 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_many
和 belongs_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 日志。
所以,我有两种形式来创建对象。我可以用 name
创建和 Owner
。现在,我想创建一个带有 name
的 Listing
并将其分配给 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_many
和 belongs_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 日志。