Ruby on rails 从子控制器创建父模型
我正在开发一个网络应用程序,可以接收公司信息。信息可用于Ruby on rails 从子控制器创建父模型,ruby-on-rails,ruby-on-rails-4,model,nested-forms,Ruby On Rails,Ruby On Rails 4,Model,Nested Forms,我正在开发一个网络应用程序,可以接收公司信息。信息可用于优先提供的(股票)或公司。换句话说,当我为这些模型中的任何一个创建一个新条目时,一个新公司就成立了 如果PreferredOffering和Incorporation是公司的子公司,即使我试图通过preferred\u productions\u controller或incorporations\u controller创建一家新的公司,我的数据库还是比较干净的。这是我的问题;我试图弄清楚如何配置视图和控制器,以便从子控制器创建父模型。我
优先提供的(股票)或公司
。换句话说,当我为这些模型中的任何一个创建一个新条目时,一个新公司就成立了
如果PreferredOffering
和Incorporation
是公司的子公司
,即使我试图通过preferred\u productions\u controller
或incorporations\u controller
创建一家新的公司,我的数据库还是比较干净的。这是我的问题;我试图弄清楚如何配置视图和控制器,以便从子控制器创建父模型。我已经做了一些研究,并看到了两个关于如何使用Rails 3实现这一点的研究,但是,似乎强参数的添加增加了另一层复杂性
所以我的模型是这样设置的
这种观点是:
<%= 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 %>
(公司特定字段)
(公司特定字段)
所以我的问题是:
如果公司有一个:合并
如果您有任何建议,我们将不胜感激。虽然这不是“Rails之路”,但让@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 %>
(公司特定字段)
(公司特定字段)
您的强参数将发生变化,因此公司
是父级,公司
是子级
另一种选择是只需通过公司
控制器即可。您可以创建两个新操作:new\u preferred\u offering
和new\u incorporation
。然后在这些动作中创建对象。或者您可以传入某种类型的:键入参数,以便正常的新建操作根据您想要的形式呈现两种形式中的一种。嗨,Ryan,感谢您的回复!我实现了您建议的第一个方法,并且得到了错误未初始化的常数CompaniesController
。你知道是什么原因导致的吗?这意味着你没有创建一个companyescontroller
(或者它拼写错误或者在错误的文件中)。像创建公司控制器一样创建它,你应该会没事的。实际上我还没有创建公司控制器。我希望能和公司控制人一起完成这一切。实际上,我正试图通过为
指定带有url\u的控制器来解决此错误。那是犹太教吗?当然,你可以将表单指向另一个控制器。现在,我从来没有使用过简单表单,所以我不知道这是如何实现的。将它与简单表单一起使用似乎非常简单url:url\u for(action:'create',controller:'incorporations')
。我现在遇到了公司下所有字段的未知属性错误。知道为什么吗?
class PreferredOffering < ActiveRecord::Base
belongs_to :company
end
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 %>
<%= 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 %>