Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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 rails中的嵌套表单和命名空间引擎_Ruby On Rails_Ruby_Models - Fatal编程技术网

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

Ruby on rails rails中的嵌套表单和命名空间引擎,ruby-on-rails,ruby,models,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 /&g

我正在构建一个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 />
在正常情况下,这应该是可行的,但这里我犯了一个很大的错误

Wanker::CompanyController#create中的名称错误 未初始化常数CompanyDetail


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

再过几个小时,我就放弃了。我改变了我的模型,使之对Rails更加明确

has_one :company_detail, :class_name => 'Wanker::CompanyDetail'
所以它改变了错误

Wanker::CompanyDetail(#70213086467980) expected, got ActionController::Parameters(#70213107743520)
我试图通过操纵数据来解决这个问题,但似乎完全不可能自动填充这个
公司详细信息

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

@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
希望这能有所帮助

@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