ruby-on-rails - 如何在Rails中构造form_for,可以同时创建belongs_to和has_many关联
问题描述
我的 Rails 应用程序中有一个has_many and belongs_to
关联。一个OfficeAddress
belongs_to Address
,所以我现在的问题是如何在表单上构建它。当我创建一个新的办公地址时,要将其与我的地址相关联,该地址应该已经创建。在我的office_address_controller
我有这个。
class OfficeAddressesController < ResourceController
def index
@office_address = Spree::OfficeAddress.all
end
def new
new_address = Spree::Address.new
@new_office_address = new_address.office_address.build
end
def create
p params
end
end
我的办公室地址new.html.erb
目前是空的,因为我找不到任何有关如何构建表格的文档。我会对示例或文档感兴趣。控制器也让build
我感到困惑。它没有抛出任何错误,因为new_address
还没有任何 Id。
解决方案
所以我不知道这是否是正确的答案,但这对我有用。所以这是我的代码。
控制器:
def new
@new_office_address = Spree::OfficeAddress.new
end
def create
b = Spree::Address.create(permit_params_address)
c = Spree::OfficeAddress.create(address_id: b.id)
if b.save && c.save
redirect_to admin_office_addresses_path
else
p b.errors.messages
end
end
查看,new.html.erb
<%= form_for [:admin, @new_office_address], html: { autocomplete: "off" } do |ofc_add_form| %>
<fieldset data-hook="new_property">
<div class="row">
<div class="col-md-12">
<%= fields_for :address, Spree::Address.default do |adds|%>
<%= render :partial => 'spree/admin/shared/address_form', :locals => { :f => adds, :type => "New Office Address" } %>
<%end%>
</div>
</div>
<div class="form-actions">
<%= render partial: 'spree/admin/shared/new_resource_links' %>
</div>
</fieldset>
<% end %>
一开始我做的是对的,但我忘了Spree::Address.default
我fields_for
真的不知道它做了什么,但在 rails 语法上,它接受一个对象。
在我的控制器new
方法上,在创建地址之后,将它们相互关联(OfficeAddress)我只需从创建的地址中获取 Id 并将其添加到我的办公室地址中。我不确定这是解决问题的最佳方法。我愿意改变。我还在我的新方法上添加更多验证
推荐阅读
- java - Java:从密钥库文件中确定密钥库的类型
- spring-boot - 在 Junit ClassRule 中访问 spring-boot application.properties 元素
- scala - Kudu Import 上的 GeoMesa 出现空间数据错误
- racket - 在使用完整的 Rosette 语言时,有哪些方法可以识别未提升的 Racket 结构?
- numba - 由于 libllvmlite.dylib 错误,UMAP 在 py2app 构建时失败
- linux - Linux ps 中的 rtprio 和 pri 值范围
- java - 是否可以使用 LWJGL 将 C++ OpenGL 代码与 Java 混合?
- pandas - 熊猫比较相关表
- oracle - 我无法在我的 Windows 上安装 oracle 数据库 12c
- elasticsearch - 如何在 Elastic Search 中更改维护活动的时间