我正在实施推荐系统 rails 5.1。我想推荐到第 8 代。我有一个隶属关系类如下:

class Affiliation < ApplicationRecord
  belongs_to :affiliate, :class_name => "User", :fore,ruby-on-rails,ruby,ruby-on-rails-5.1"/>
	














首页 > 解决方案 > 未定义的方法 `referrals' 用于#

我正在实施推荐系统 rails 5.1。我想推荐到第 8 代。我有一个隶属关系类如下:

class Affiliation < ApplicationRecord
  belongs_to :affiliate, :class_name => "User", :fore

问题描述

我正在实施推荐系统 rails 5.1。我想推荐到第 8 代。我有一个隶属关系类如下:

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

我的用户.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

如何在 Python 中将 UTM 转换为纬度/经度?

{
  "type": "MultiPolygon",
  "coordinates": [[[
        [6707794.77817316, 1952512.97762237],
        [6707794.43138905, 1952566.21209599],
        [6707897.49942442, 1952567.26754007],
        [6707897.9039513, 1952513.5347079],
        [6707794.77817316, 1952512.97762237]
      ]]]
}

这些是我在萨克拉门托市的 UTM 坐标

from pyproj import Proj
Lat = 52.063098675
Lon = -114.132980348
ZoneNo = "11" #Manually input or from other sources
myProj = Proj("+proj=utm +zone="+\
ZoneNo+", +north +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
Lon2, Lat2 = myProj(UTMx, UTMy,inverse=True)



 [57.645243963689346, -97.82662155895939][57.64521883657446, 
-97.82633467103226][57.64520287229081, -97.82615238782866] 
[57.64518564728056, -97.82595574421379][57.646086991794625, 
-97.82587777819731][57.64614690939316, -97.8265560026529] 
[57.645243963689346, -97.82662155895939]

但是这个返回坐标位于加拿大。但我想在萨克拉门托市找到这个纵向和横向的

谁能帮我转换正确的格式以将 UTM 转换为 LAN LONG 坐标。

标签: ruby-on-railsrubyruby-on-rails-5.1

解决方案


错误来自仪表板控制器这一行

                  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

推荐阅读