[英]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.