簡體   English   中英

從子控制器創建父模型

[英]Create parent model from child controller

我正在開發一個可接收有關公司信息的Web應用程序。 可以為(股票) PreferredOfferingIncorporation 換句話說,當我為其中一個模型創建新條目時,就會形成一個新公司。

結果表明,即使PreferredOfferingIncorporationCompany ,即使我試圖通過preferred_offerings_controllerincorporations_controller創建新的Company ,我的數據庫也會更干凈。 這是我的問題; 我試圖弄清楚如何配置我的視圖和控制器以從子控制器創建父模型。 我已經做過一些研究,並且看到了另外兩個有關如何使用Rails 3實現此目的的S / O帖子 ,但是似乎添加了強大的參數似乎為這項工作增加了另一層復雜性。

所以我有這樣的模型設置

class Company < ActiveRecord::Base
    belongs_to :user
    has_one :incorporation, dependent: :destroy
    has_many :preferred_offerings, dependent: :destroy

    accepts_nested_attributes_for :preferred_offerings, allow_destroy: true
    accepts_nested_attributes_for :incorporation, allow_destroy: true
end

class Incorporation < ActiveRecord::Base
  belongs_to :company
end

class PreferredOffering < ActiveRecord::Base
    belongs_to :company
end

控制器和視圖是我所討厭的。

讓我們看一下合並視圖/控制器。 如果我將其配置為Incorporation has_one :company則將其設置如下:

class IncorporationsController < ApplicationController
  def index
  end

  def new
    @user=current_user
    @incorporation = @user.incorporations.build
    @company = @incorporation.build_company
  end

  def create
    @incorporation =   current_user.incorporations.build(incorporation_params)
  end

  private

  def incorporation_params
    params.require(:incorporation).permit(:title, :trademark_search, :user_id, :employee_stock_options, :submit, :_destroy,
                                                    company_attributes: [:id, :name, :employee_stock_options, :options_pool, :state_corp, :street, :city, :state, :zip, :issued_common_stock, :outstanding_common_stock, :fiscal_year_end_month, :fiscal_year_end_day, :user_id, :_destroy]
                                         )
    end

end

並且視圖將是:

<%= simple_form_for @incorporation, html: {id:"incorporationform"}, remote: false, update: { success: "response", failure: "error"} do |f| %>
    (incorporation-specific fields)
    <%= f.simple_fields_for :company do |company| %>
        (Company-specific fields)
    <% end %>
<% end %>

所以我的問題是:

我需要如何修改我的控制器並查看是否要通過incorporations_controller創建一個Company IF Company has_one :incorporation

任何建議將不勝感激。

盡管它不是“ Rails Way”,但是即使@company incorporations#new動作中@company成為您的表單的父代也沒有什么錯。 您的視圖將變為:

<%= simple_form_for @company, html: {id:"companyform"}, remote: false, update: { success: "response", failure: "error"} do |f| %>
  (company-specific fields)
  <%= f.simple_fields_for :incorporation do |incorporation| %>
    (incorporation-specific fields)
  <% end %>
<% end %>

而且您強大的參數會發生變化,因此Company是父級, Incorporation是子級。

另一種選擇是簡單地通過Company控制器。 您可以創建兩個新操作: new_preferred_offeringnew_incorporation 然后,您將在這些操作中創建對象。 或者,您可以傳入某種:type參數,以便普通的new動作根據您想要的形式呈現兩種形式之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM