Ruby on rails 接收未定义的方法“在关联上反映”';对于NilClass:Class Cocoon Rails 6
我目前正在使用双嵌套分部将子记录添加到深度嵌套表单中。表单输入显示,但链接到添加关联按钮抛出异常。如何使用“链接到添加关联”按钮访问子表单输入 providers\u controller.rbRuby on rails 接收未定义的方法“在关联上反映”';对于NilClass:Class Cocoon Rails 6,ruby-on-rails,ruby,cocoon-gem,Ruby On Rails,Ruby,Cocoon Gem,我目前正在使用双嵌套分部将子记录添加到深度嵌套表单中。表单输入显示,但链接到添加关联按钮抛出异常。如何使用“链接到添加关联”按钮访问子表单输入 providers\u controller.rb class ProviderContractsController < ApplicationController before_action :set_provider_contract, only: %i[show edit update destroy] def new @pr
class ProviderContractsController < ApplicationController
before_action :set_provider_contract, only: %i[show edit update destroy]
def new
@provider_contract = ProviderForm.find(params[:provider_form_id])
@provider_contract = ProviderContract.new(provider_form_id: @provider.id)
@provider_contract.build_contract_term
@provider_contract.contract_term.contract_term_fees.build
rescue ActiveRecord::RecordNotFound
redirect_to home_path, notice: 'The provider has been removed or has not been selected'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_provider_contract
@provider_contract = ProviderContract.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def provider_contract_params
params.require(:provider_contract).permit(ProviderContract.attribute_names.map(&:to_sym),
contract_term_attributes: ContractTerm.attribute_names.map(&:to_sym).push( contract_term_fees_attributes: ContractTermFee.attribute_names.map(&:to_sym).push(:id, :_destroy))
end
end
<%= simple_form_for(@provider_contract, html: { class: "ui form"}) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="ui tab" data-tab="stage-4">
<%= f.simple_fields_for :contract_term do |ct| %>
<%= render 'provider_contracts/partials/contract_term', f: ct %>
<% end %>
</div>
<% end %>
class ContractTerm < ApplicationRecord
belongs_to :provider_contract
has_many :contract_term_fees, dependent: :destroy
accepts_nested_attributes_for :contract_term_fees, reject_if: :all_blank, allow_destroy: true
end
class ProviderContractsController
\u form.html.erb
class ProviderContractsController < ApplicationController
before_action :set_provider_contract, only: %i[show edit update destroy]
def new
@provider_contract = ProviderForm.find(params[:provider_form_id])
@provider_contract = ProviderContract.new(provider_form_id: @provider.id)
@provider_contract.build_contract_term
@provider_contract.contract_term.contract_term_fees.build
rescue ActiveRecord::RecordNotFound
redirect_to home_path, notice: 'The provider has been removed or has not been selected'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_provider_contract
@provider_contract = ProviderContract.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def provider_contract_params
params.require(:provider_contract).permit(ProviderContract.attribute_names.map(&:to_sym),
contract_term_attributes: ContractTerm.attribute_names.map(&:to_sym).push( contract_term_fees_attributes: ContractTermFee.attribute_names.map(&:to_sym).push(:id, :_destroy))
end
end
<%= simple_form_for(@provider_contract, html: { class: "ui form"}) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="ui tab" data-tab="stage-4">
<%= f.simple_fields_for :contract_term do |ct| %>
<%= render 'provider_contracts/partials/contract_term', f: ct %>
<% end %>
</div>
<% end %>
class ContractTerm < ApplicationRecord
belongs_to :provider_contract
has_many :contract_term_fees, dependent: :destroy
accepts_nested_attributes_for :contract_term_fees, reject_if: :all_blank, allow_destroy: true
end
\u contract\u term.html.erb
<div id="#term_fees">
<%= f.simple_fields_for contract_term_fees do |ff| %>
<%= render 'provider_contracts/contract_term_fee_fields', f: ff %>
<% end %>
</div>
<div class="pt-2 pb-2 links">
<%= link_to_add_association f, :contract_term_fees, class: 'ui positive basic button' do %>
Add Fees
<% end %>
</div>
加收费用
合同条款.rb
class ProviderContractsController < ApplicationController
before_action :set_provider_contract, only: %i[show edit update destroy]
def new
@provider_contract = ProviderForm.find(params[:provider_form_id])
@provider_contract = ProviderContract.new(provider_form_id: @provider.id)
@provider_contract.build_contract_term
@provider_contract.contract_term.contract_term_fees.build
rescue ActiveRecord::RecordNotFound
redirect_to home_path, notice: 'The provider has been removed or has not been selected'
end
private
# Use callbacks to share common setup or constraints between actions.
def set_provider_contract
@provider_contract = ProviderContract.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def provider_contract_params
params.require(:provider_contract).permit(ProviderContract.attribute_names.map(&:to_sym),
contract_term_attributes: ContractTerm.attribute_names.map(&:to_sym).push( contract_term_fees_attributes: ContractTermFee.attribute_names.map(&:to_sym).push(:id, :_destroy))
end
end
<%= simple_form_for(@provider_contract, html: { class: "ui form"}) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
<div class="ui tab" data-tab="stage-4">
<%= f.simple_fields_for :contract_term do |ct| %>
<%= render 'provider_contracts/partials/contract_term', f: ct %>
<% end %>
</div>
<% end %>
class ContractTerm < ApplicationRecord
belongs_to :provider_contract
has_many :contract_term_fees, dependent: :destroy
accepts_nested_attributes_for :contract_term_fees, reject_if: :all_blank, allow_destroy: true
end
class ContractTerm
服务器日志
ActionView::Template::Error (undefined method `reflect_on_association' for NilClass:Class):
62: <% end %>
63: </div>
64: <div class="pt-2 links">
65: <%= link_to_add_association f, :contract_term_fees, class: 'ui secondary basic button' do %>
66: Add Fees
67: <% end %>
68: </div>
ActionView::Template::Error(NilClass:Class的未定义方法“reflect\u on\u association”):
62:
63:
64:
65:
66:加上费用
67:
68:
通常,当发生此错误时,它意味着接受
的_嵌套_属性_丢失,或者我们在某个地方交了一个nil对象
从您显示的代码中
接受:合同的\u嵌套属性\u在
中缺少条款合同
- 合同条款费用的
是一个打字错误,应该是f.simple\u fields\u
(f.simple\u fields\u:contract\u term\u fees
显然为零)contract\u term\u fees
inverse\u:
,以确保嵌套关系将正确保存(默认情况下,所属的是必需的,没有的inverse\u,Rails无法知道它是提供的)
所以
错误显示的代码与您正在显示的代码不同(错误的第65行与您的合同条款不同)。对不起,我昨晚累坏了。我不确定这是否是问题所在,但您丢失了:
此处
,:合同条款\u费用
提供商表单id未保存。。我只是将其放在一个隐藏字段中谢谢!-从现在起我将使用反向\u