rails中的嵌套表单和命名空间引擎

时间:2015-01-13 02:38:43

标签: ruby-on-rails ruby models

我正在构建一个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

在正常情况下应该有效,但在这里我遇到了很大的错误。

  Wanker中的 NameError :: CompanyController #create   未初始化的常数CompanyDetail

如何指定此CompanyDetail模型位于Wanker命名空间中?谢谢;)

1 个答案:

答案 0 :(得分:0)

再过几个小时我放弃了。我将模型更改为更明确的Rails

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

所以它改变了错误

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

我试图通过操纵数据来绕过它,但似乎完全不可能自动填充这个company_details表。

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

@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

希望这无论如何都有帮助。