我不明白为什么这不起作用
模型
class CompanyBorrower < ApplicationRecord
has_many :borrower_individuals
has_many :individuals, -> { distinct }, :through => :borrower_individuals
end
class BorrowerIndividual < ApplicationRecord
belongs_to :company_borrower, optional: true
belongs_to :individual, optional: true
end
class Individual < ApplicationRecord
has_many :borrower_individuals
has_many :company_borrowers, :through => :borrower_individuals
end控制器
@borrower = CompanyBorrower.find(params[:id])
@individuals = @borrower.individuals.all
@roles = @individuals.borrower_individuals.all和我得到了错误.
undefined method `borrower_individuals' for #<Individual::ActiveRecord_AssociationRelation:0x000000000dc58660>错误发生在@roles上--如果我删除,错误将消失。
发布于 2018-10-22 11:59:23
@borrower = CompanyBorrower.find(params[:id])
@individuals = @borrower.individuals.all
@roles = @individuals.borrower_individuals.all这里您正在调用上的关联方法,ActiveRecordRelation对象,,而不是活动记录对象.i.e,您是在ActiveRecords上调用它,而不是在单一record.You上,需要调用单个记录上的关联方法。@individuals = @borrower.individuals.all
在这里,您已经调用了单个活动记录对象(@借款人)上的不可分割(关联方法),如果存在记录,.It将返回ActiveRecords (ActiveRecord_Relation对象)的合集(如果记录不存在,它将返回空的活动记录关系对象)。在下一行中,您正在尝试调用rective record关系对象上的borrower_individuals(关联方法)。
@roles = @individuals.borrower_individuals.all您需要重写上面的代码
@roles = @individuals.map(&:borrower_individuals).flatten正如Marek所提到的,它将导致N+1查询并返回数组对象。为了避免N+1查询,我们可以更改它
@borrower = CompanyBorrower.find(params[:id])
@individuals = @borrower.individuals.all
@roles = @individuals.borrower_individuals.all
@borrower = CompanyBorrower.includes(individuals: [:borrower_individuals]).find(params[:id])
@individuals = @borrower.individuals.all
@roles = @individuals.map(&:borrower_individuals).flatten # will return array object.如果要在html page.It中使用@page.It和@roles变量,则可以避免使用它,这取决于您将如何使用它。
发布于 2018-10-22 11:45:20
@individual不包含单个Individual实例,而是包含Relation,显然不能在该实例方法上调用Individual实例方法。您可以以稍微不同的方式设置您的@roles,例如:
@roles = BorrowerIndividual.where(individual_id: @individuals.pluck(:id))但老实说,我不知道这在你的情况下是否必要,因为在我看来,你试图用有点过于复杂的方式来解决相当简单的问题。
https://stackoverflow.com/questions/52928428
复制相似问题