rails 中的嵌套表单和命名空间引擎
Nested form and namespaced engine in rails
我正在构建一个 Rails 引擎,所有内容都已命名空间。例如,可以从 Wanker::MyModel
访问模型
在这个项目中我第一次想使用Rails提供的自动表单系统。我想创建一个 Wanker::Company
后跟一个名为 Wanker::CompanyDetail
的链接 table
<%= 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 in Wanker::CompanyController#create
uninitialized constant CompanyDetail
如何指定此 CompanyDetail
模型在 Wanker
命名空间中?谢谢 ;)
又过了几个小时,我放弃了。我将我的模型更改为更明确 Rails
has_one :company_detail, :class_name => 'Wanker::CompanyDetail'
所以改错了
Wanker::CompanyDetail(#70213086467980) expected, got ActionController::Parameters(#70213107743520)
我试图通过操纵数据来绕过它,但似乎完全不可能自动填充此 company_details
table。
我唯一可行的解决方案是在保存数据时取消这种自动操作。我把它分成两个独立的系统。
@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
希望这对您有所帮助。
我正在构建一个 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 in Wanker::CompanyController#create uninitialized constant CompanyDetail
如何指定此 CompanyDetail
模型在 Wanker
命名空间中?谢谢 ;)
又过了几个小时,我放弃了。我将我的模型更改为更明确 Rails
has_one :company_detail, :class_name => 'Wanker::CompanyDetail'
所以改错了
Wanker::CompanyDetail(#70213086467980) expected, got ActionController::Parameters(#70213107743520)
我试图通过操纵数据来绕过它,但似乎完全不可能自动填充此 company_details
table。
我唯一可行的解决方案是在保存数据时取消这种自动操作。我把它分成两个独立的系统。
@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
希望这对您有所帮助。