我正在研究一个收集有关公司信息的网络应用程序。可以为PreferredOffering
(库存)或Incorporation
提供信息。换句话说,当我为这些模型中的任何一个创建新条目时,就形成了一个新的公司。
如果PreferredOffering
和Incorporation
是Company
的孩子,即使我正在尝试浏览preferred_offerings_controller
或{{}},我的数据库也更清晰了{1}}创建新的incorporations_controller
。这就是我的问题;我正在试图弄清楚如何配置我的视图和控制器以从子控制器创建父模型。我已经完成了一些研究,并且已经看到两个other S/O posts关于如何使用Rails 3实现这一点,但是看起来强大的params的添加增加了另一层复杂性。
Company
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 %>
IF Company
incorporations_controller
我们非常感谢任何建议。
答案 0 :(得分:0)
虽然它不是“Rails方式”,但将@company
作为表单中的父级并没有什么不妥,即使它位于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
是父,Incorporation
是孩子。
另一种选择是简单地通过Company
控制器。您可以创建两个新操作:new_preferred_offering
和new_incorporation
。然后,您将在这些操作中创建对象。或者你可以传递某种:type
参数,以便普通的new
动作根据你想要的那个呈现两种形式中的一种。