代码之家  ›  专栏  ›  技术社区  ›  Garfield

Rails:非id外键查找ActiveRecord

  •  23
  • Garfield  · 技术社区  · 14 年前

    我想要 ActiveRecord 从表中按非id列查找。 希望当我给你我的代码样本时这是清楚的。

    class CoachClass < ActiveRecord::Base
      belongs_to :coach
    end
    
    class Coach < ActiveRecord::Base
        has_many :coach_classes, :foreign_key => 'user_name'
    end
    

    coach_obj.coach_classes ,这就触发了

    SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2)
    

    (2)作为教练 id 这就是我的问题。)

    我要它触发

    SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 'David')
    

    user_name

    用户名

    coach_id 在我的 coach_classes 不知什么原因。

    3 回复  |  直到 14 年前
        1
  •  53
  •   John Topley    14 年前

    我认为您还需要指定关联的主键选项:

    class CoachClass < ActiveRecord::Base 
      belongs_to :coach, :foreign_key => 'user_name', :primary_key => 'user_name'
    end
    
    class Coach < ActiveRecord::Base
      has_many :coach_classes, :foreign_key => 'user_name', :primary_key => 'user_name'
    end 
    

    id

        2
  •  10
  •   Marcel Jackwerth    14 年前

    有一个选项叫做 primary_key 默认设置为 :id . 您要使用:

    has_many :coach_classes, :foreign_key => :user_name, :primary_key => :user_name
    

    也可以在上使用这些选项 belongs_to 联想。

    阅读更多信息 documentation

        3
  •  -4
  •   alex.zherdev    14 年前

    你需要使用 finder_sql

    class Coach < ActiveRecord::Base
        has_many :coach_classes, :finder_sql => 'SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")'
    end