从子控制器创建父模型
Create parent model from child controller
我正在开发一个收集公司信息的网络应用程序。可以获取 PreferredOffering
(股票)或 Incorporation
的信息。所以换句话说,当我为这些模型中的任何一个创建一个新条目时,一个新公司就成立了。
结果表明,如果 PreferredOffering
和 Incorporation
是 Company
的子级,我的数据库会更干净,即使我正在尝试通过 preferred_offerings_controller
或incorporations_controller
创建一个新的 Company
。这是我的问题;我试图弄清楚如何配置我的视图和控制器以从子控制器创建父模型。我已经做了一些研究,并且已经看到两个 other S/O posts 关于如何使用 Rails 3 完成此操作,但是似乎添加强参数会为这项工作增加另一层复杂性。
所以我的模型是这样设置的
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
我不确定控制器和视图。
让我们来看看合并view/controller。 如果我要配置它 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
IF Company has_one :incorporation
[=28= 创建一个 Company
]
如有任何建议,我们将不胜感激。
虽然它不是 "Rails Way",但将 @company
作为表单中的 parent 并没有什么错,即使它在 incorporations#new
行动。你的观点会变成这样:
<%= 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
是 parent,Incorporation
是 child。
另一种选择是简单地通过 Company
控制器。您可以创建两个新操作:new_preferred_offering
和 new_incorporation
。然后,您将在这些操作中创建 objects。或者您可以传入某种 :type
参数,以便正常的 new
操作根据您想要的呈现两种形式之一。
我正在开发一个收集公司信息的网络应用程序。可以获取 PreferredOffering
(股票)或 Incorporation
的信息。所以换句话说,当我为这些模型中的任何一个创建一个新条目时,一个新公司就成立了。
结果表明,如果 PreferredOffering
和 Incorporation
是 Company
的子级,我的数据库会更干净,即使我正在尝试通过 preferred_offerings_controller
或incorporations_controller
创建一个新的 Company
。这是我的问题;我试图弄清楚如何配置我的视图和控制器以从子控制器创建父模型。我已经做了一些研究,并且已经看到两个 other S/O posts 关于如何使用 Rails 3 完成此操作,但是似乎添加强参数会为这项工作增加另一层复杂性。
所以我的模型是这样设置的
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
我不确定控制器和视图。
让我们来看看合并view/controller。 如果我要配置它 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
IF Company has_one :incorporation
[=28= 创建一个 Company
]
如有任何建议,我们将不胜感激。
虽然它不是 "Rails Way",但将 @company
作为表单中的 parent 并没有什么错,即使它在 incorporations#new
行动。你的观点会变成这样:
<%= 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
是 parent,Incorporation
是 child。
另一种选择是简单地通过 Company
控制器。您可以创建两个新操作:new_preferred_offering
和 new_incorporation
。然后,您将在这些操作中创建 objects。或者您可以传入某种 :type
参数,以便正常的 new
操作根据您想要的呈现两种形式之一。