Направляющие: Не идентификационный поиск внешнего ключа ActiveRecord

Я хочу ActiveRecord к поиску неидентификационным столбцом от таблицы. Надежда это ясно, когда я даю Вам свой пример кода.

class CoachClass < ActiveRecord::Base
  belongs_to :coach
end

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

Когда я делаю a 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')

('David', являющийся, что тренер user_name)

user_name уникально и существует в обеих таблицах.

Я не хочу иметь a coach_id в моем coach_classes таблица по некоторым причинам.

24
задан Garfield 23 July 2010 в 11:20
поделиться

3 ответа

Я думаю, вам нужно указать параметры первичного ключа в ассоциациях также:

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 ).

53
ответ дан 28 November 2019 в 22:48
поделиться

Необходимо использовать finder_sql:

class Coach < ActiveRecord::Base
    has_many :coach_classes, :finder_sql => 'SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")'
end
-4
ответ дан 28 November 2019 в 22:48
поделиться

Существует опция под названием primary_key , которая по умолчанию установлена ​​на : id . Вы хотите использовать:

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

Также используйте эти параметры в ассоциации own_to .

Подробнее читайте в документации .

10
ответ дан 28 November 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: