2015-01-13 44 views
1

我正在构建Rails引擎,并且所有内容都是命名空间。例如,这些模型可以从Wanker::MyModel在轨道中嵌套窗体和名称空间引擎

这是第一次在这个项目中我想使用Rails提供的自动表单系统。我想创建一个Wanker::Company后跟一个链接表名为Wanker::CompanyDetail

<%= form_for @company, url: company_index_path(@company) do |f| %> 

<div> 
<%= f.label :name %><br /> 
<%= f.text_field :name, autocomplete: "off" %> 
</div> 

<br /> 

<%= f.fields_for @company_detail do |d| %> 

    <%= d.label :address %><br /> 
    <%= d.text_field :address, autocomplete: "off" %> 
    <br /> 

然后我把它保存在create方法

@company = Wanker::Company.new(params[:company].permit!) 

if @company.save 

在应该工作正常的情况下,但在这里我有一个大错误。

NameError在Wanker :: CompanyController#创建 未初始化的常量CompanyDetail

我怎么可以指定这个CompanyDetail模型在Wanker命名空间?谢谢;)

回答

0

几个小时后,我放弃了。我改变了我的模型,以更明确到Rails

has_one :company_detail, :class_name => 'Wanker::CompanyDetail' 

所以它改变了错误

Wanker::CompanyDetail(#70213086467980) expected, got ActionController::Parameters(#70213107743520) 

我试图通过操纵DATAS绕过它,但它看起来就像是完全不可能的填充此company_details表自动。

我唯一可行的解​​决方案是在保存数据时取消此自动操作。我将它分成2个独立的系统。

@company_detail = Wanker::CompanyDetail.new(params[:company][:company_detail].permit!) 
params[:company].delete(:company_detail) 

@company = Wanker::Company.new(params[:company].permit!) 

@company.user_id = current_user.id 

if @company.save && @company_detail.save 

    @company_detail.company_id = @company.id 
    @company_detail.save 

    flash[:notice] = "Your company has been added" 


else 

    flash[:errors] = @company.errors.full_messages + @company_detail.errors.full_messages 

    redirect_to(:back) 

end 

希望这有助于反正。