#<User::ActiveRecord_Associations_CollectionProxy 的未定义方法“推荐”:
undefined method `referrals' for #<User::ActiveRecord_Associations_CollectionProxy:
我正在实施推荐系统 rails 5.1。我想推荐到第 8 代。
我的隶属关系 class 如下:
class Affiliation < ApplicationRecord
belongs_to :affiliate, :class_name => "User", :foreign_key => "affiliate_id"
belongs_to :referred, :class_name => "User", :foreign_key => "referred_id"
validates_presence_of :affiliate, :referred
validates_uniqueness_of :referred_id
private
def validate
errors.add_to_base("Affiliate and Referrer can't be the same
user.") if affiliate and (affiliate == referred)
end
end
我的User.rb
class User < ApplicationRecord
has_many :affiliations, :foreign_key => "affiliate_id", :dependent => :destroy
has_many :referrals, :through => :affiliations, :source => :referred
# map.affiliate_referral 'a/:referrer_code', :controller =>
'referrals', :action => 'new'
def affiliate_link
"https://localhost:3000/members/new/?referrer_code=#
{self.affiliate_code}"
end
现在推荐系统正在运行,我可以为他们的推荐人创建成员
挑战在于如何看待第 1 代到第 8 代。
我收到此错误:
undefined method `referrals' for #<User::ActiveRecord_Associations_CollectionProxy:0x00007f48e4c2d2e0>
我可以推荐第一代,但从第二代开始就不行了。
请帮忙...???
这是我的仪表板控制器
class DashboardController < ApplicationController
def dashboard
# storage for referrals and affilations through eight
generations
#generate first generation referrals
def flatten_scopes(scopes)
scopes.inject([]) { |a,r| r.is_a?(Array) ? a += flatten_scopes(r) : a.push(r) }
end
@firstgeners = referral_gen(current_user)
@secondgeners ||= []
@thirdgeners ||= []
@fourthgeners ||= []
@fifthgeners ||= []
@sixthgeners ||= []
@seventhgeners ||= []
@eightgeners ||= []
#loop first generation referrals to get the affiliates to
form our second
generation affiliations
#@firstgeners = @firstgeners1.flatten
#@secondgeners1 = []
@firstgeners = flatten_scopes(@firstgeners)
if @firstgeners.any?
@firstgeners.each do |u|
if u.referrals.any?
@secondgeners << u.referrals
end
end
end
#@secondgeners = @secondgeners1.flatten
#from second generation referrals generate the affiliations
# @thirdgeners1 = []
@secondgeners = flatten_scopes(@secondgeners)
if @secondgeners.any?
@secondgeners.each do |u|
if u.referrals.any?
@thirdgeners << u.referrals
end
end
end
#@thirdgeners = @thirdgeners1.flatten
@thirdgeners = flatten_scopes(@thirdgeners)
#from third generation referrals generate the affiliations
if @thirdgeners.any?
@thirdgeners.each do |u|
if u.referrals.any?
@fourthgeners << u.referrals
end
end
end
#@fourthgeners = @fourthgeners1.flatten
#from third generation referrals generate the affiliations
@fourthgeners = flatten_scopes(@fourthgeners)
if @fourthgeners.any?
@fourthgeners.each do |u|
if u.referrals.any?
@fifthgeners << u.referrals
end
end
end
# @fifthgeners = @fifthgeners1.flatten
@fifthgeners = flatten_scopes(@fifthgeners)
if @fifthgeners.any?
@fifthgeners.each do |u|
if u.referrals.any?
@sixthgeners << u.referrals
end
end
end
# @sixthgeners = @sixthgeners1.flatten
@sixthgeners = flatten_scopes(@sixthgeners)
if @sixthgeners.any?
@sixthgeners.each do |u|
if u.referrals.any?
@seventhgeners << u.referrals
end
end
end
#@seventhgeners = @seventhgeners.flatten
@secondgeners = flatten_scopes(@seventhgeners)
if @seventhgeners.any?
@seventhgeners.each do |u|
if u.referrals.any?
@eightgeners << u.referrals
end
end
end
#@eightgeners = @eightgeners1.flatten
end
#generate all affiliations of current_user
def referral_gen(user)
referrals = user.referrals
return referrals
end
错误来自仪表板控制器这一行
if u.referrals.any?
@thirdgeners << u.referrals
这条线在下面的区块内..一旦我的第一代推荐人推荐了其他人。发生错误。如果他们没有,它运作良好。只是打电话给我的推荐人就可以了,因为我有这样的活动记录协会。但我认为 current_user.referrals 会给我用户数组。我可以遍历他们并获得他们的推荐,就像 user.referrals 一样重复 8 次。但不是那样工作的。
@secondgeners = flatten_scopes(@secondgeners)
if @secondgeners.any?
@secondgeners.each do |u|
if u.referrals.any?
@thirdgeners << u.referrals
end
end
end
现在我开始工作了。
完整的用户对象仅在第一次调用集合 @user.referrals
时可用,在此级别之后,之前的调用无法获得此用户所推荐的用户组的唯一关联。所以我做了这样的事情:我使用数据库中的推荐代码进行搜索并 return 正确的推荐。即使性能缓慢,它也可以向上工作到第 8 代。
if @firstgeners.any?
@firstgeners.each do |u|
@users.each do |e|
if e.referrer_code == u.affiliate_code
@secondgeners.push(e)
end
end
end
end
我正在实施推荐系统 rails 5.1。我想推荐到第 8 代。 我的隶属关系 class 如下:
class Affiliation < ApplicationRecord
belongs_to :affiliate, :class_name => "User", :foreign_key => "affiliate_id"
belongs_to :referred, :class_name => "User", :foreign_key => "referred_id"
validates_presence_of :affiliate, :referred
validates_uniqueness_of :referred_id
private
def validate
errors.add_to_base("Affiliate and Referrer can't be the same
user.") if affiliate and (affiliate == referred)
end
end
我的User.rb
class User < ApplicationRecord
has_many :affiliations, :foreign_key => "affiliate_id", :dependent => :destroy
has_many :referrals, :through => :affiliations, :source => :referred
# map.affiliate_referral 'a/:referrer_code', :controller =>
'referrals', :action => 'new'
def affiliate_link
"https://localhost:3000/members/new/?referrer_code=#
{self.affiliate_code}"
end
现在推荐系统正在运行,我可以为他们的推荐人创建成员
挑战在于如何看待第 1 代到第 8 代。 我收到此错误:
undefined method `referrals' for #<User::ActiveRecord_Associations_CollectionProxy:0x00007f48e4c2d2e0>
我可以推荐第一代,但从第二代开始就不行了。
请帮忙...??? 这是我的仪表板控制器
class DashboardController < ApplicationController
def dashboard
# storage for referrals and affilations through eight
generations
#generate first generation referrals
def flatten_scopes(scopes)
scopes.inject([]) { |a,r| r.is_a?(Array) ? a += flatten_scopes(r) : a.push(r) }
end
@firstgeners = referral_gen(current_user)
@secondgeners ||= []
@thirdgeners ||= []
@fourthgeners ||= []
@fifthgeners ||= []
@sixthgeners ||= []
@seventhgeners ||= []
@eightgeners ||= []
#loop first generation referrals to get the affiliates to
form our second
generation affiliations
#@firstgeners = @firstgeners1.flatten
#@secondgeners1 = []
@firstgeners = flatten_scopes(@firstgeners)
if @firstgeners.any?
@firstgeners.each do |u|
if u.referrals.any?
@secondgeners << u.referrals
end
end
end
#@secondgeners = @secondgeners1.flatten
#from second generation referrals generate the affiliations
# @thirdgeners1 = []
@secondgeners = flatten_scopes(@secondgeners)
if @secondgeners.any?
@secondgeners.each do |u|
if u.referrals.any?
@thirdgeners << u.referrals
end
end
end
#@thirdgeners = @thirdgeners1.flatten
@thirdgeners = flatten_scopes(@thirdgeners)
#from third generation referrals generate the affiliations
if @thirdgeners.any?
@thirdgeners.each do |u|
if u.referrals.any?
@fourthgeners << u.referrals
end
end
end
#@fourthgeners = @fourthgeners1.flatten
#from third generation referrals generate the affiliations
@fourthgeners = flatten_scopes(@fourthgeners)
if @fourthgeners.any?
@fourthgeners.each do |u|
if u.referrals.any?
@fifthgeners << u.referrals
end
end
end
# @fifthgeners = @fifthgeners1.flatten
@fifthgeners = flatten_scopes(@fifthgeners)
if @fifthgeners.any?
@fifthgeners.each do |u|
if u.referrals.any?
@sixthgeners << u.referrals
end
end
end
# @sixthgeners = @sixthgeners1.flatten
@sixthgeners = flatten_scopes(@sixthgeners)
if @sixthgeners.any?
@sixthgeners.each do |u|
if u.referrals.any?
@seventhgeners << u.referrals
end
end
end
#@seventhgeners = @seventhgeners.flatten
@secondgeners = flatten_scopes(@seventhgeners)
if @seventhgeners.any?
@seventhgeners.each do |u|
if u.referrals.any?
@eightgeners << u.referrals
end
end
end
#@eightgeners = @eightgeners1.flatten
end
#generate all affiliations of current_user
def referral_gen(user)
referrals = user.referrals
return referrals
end
错误来自仪表板控制器这一行
if u.referrals.any?
@thirdgeners << u.referrals
这条线在下面的区块内..一旦我的第一代推荐人推荐了其他人。发生错误。如果他们没有,它运作良好。只是打电话给我的推荐人就可以了,因为我有这样的活动记录协会。但我认为 current_user.referrals 会给我用户数组。我可以遍历他们并获得他们的推荐,就像 user.referrals 一样重复 8 次。但不是那样工作的。
@secondgeners = flatten_scopes(@secondgeners)
if @secondgeners.any?
@secondgeners.each do |u|
if u.referrals.any?
@thirdgeners << u.referrals
end
end
end
现在我开始工作了。
完整的用户对象仅在第一次调用集合 @user.referrals
时可用,在此级别之后,之前的调用无法获得此用户所推荐的用户组的唯一关联。所以我做了这样的事情:我使用数据库中的推荐代码进行搜索并 return 正确的推荐。即使性能缓慢,它也可以向上工作到第 8 代。
if @firstgeners.any?
@firstgeners.each do |u|
@users.each do |e|
if e.referrer_code == u.affiliate_code
@secondgeners.push(e)
end
end
end
end