[英]Create parent model from child controller
我正在開發一個可接收有關公司信息的Web應用程序。 可以為(股票) PreferredOffering
或Incorporation
。 換句話說,當我為其中一個模型創建新條目時,就會形成一個新公司。
結果表明,即使PreferredOffering
和Incorporation
是Company
,即使我試圖通過preferred_offerings_controller
或incorporations_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_offering
和new_incorporation
。 然后,您將在這些操作中創建對象。 或者,您可以傳入某種:type
參數,以便普通的new
動作根據您想要的形式呈現兩種形式之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.