首页 > 解决方案 > 如何在Rails中构造form_for,可以同时创建belongs_to和has_many关联

问题描述

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

标签: ruby-on-railsform-for

解决方案


所以我不知道这是否是正确的答案,但这对我有用。所以这是我的代码。

控制器:

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.defaultfields_for真的不知道它做了什么,但在 rails 语法上,它接受一个对象。

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


推荐阅读