Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从子控制器创建父模型_Ruby On Rails_Ruby On Rails 4_Model_Nested Forms - Fatal编程技术网

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 %>