繁体   English   中英

如何在 Rails 中构造 form_for 可以创建belongs_to 和 has_many 关联

[英]How to construct form_for in Rails that can create both belongs_to and has_many association

我的 Rails 应用中有has_many and belongs_to关联。 一个OfficeAddress 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 %>

一开始我是在做正确的事情,但我忘了在fields_forfields_for Spree::Address.defaultfields_for我真的不知道它是做什么的,但在 Rails 语法上,它接受一个对象。

在我的控制器new方法上,创建地址后,将它们相互关联 (OfficeAdddress) 我只需从创建的地址中获取 Id 并将其添加到我的办公室地址中。 我不确定这是解决问题的最佳方法。 我愿意接受改变。 我还在我的新方法上添加更多验证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM