【问题标题】:How to construct form_for in Rails that can create both belongs_to and has_many association如何在Rails中构造form_for,可以同时创建belongs_to和has_many关联
【发布时间】:2019-08-26 23:42:22
【问题描述】:

我的 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。

【问题讨论】:

标签: ruby-on-rails form-for


【解决方案1】:

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

控制器:

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_for 上输入Spree::Address.default 我真的不知道它做了什么,但在rails 语法上,它接受一个对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2015-04-17
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多