Я хочу 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
таблица по некоторым причинам.
Я думаю, вам нужно указать параметры первичного ключа в ассоциациях также:
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
).
Необходимо использовать finder_sql
:
class Coach < ActiveRecord::Base
has_many :coach_classes, :finder_sql => 'SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")'
end
Существует опция под названием primary_key
, которая по умолчанию установлена на : id
. Вы хотите использовать:
has_many :coach_classes, :foreign_key => :user_name, :primary_key => :user_name
Также используйте эти параметры в ассоциации own_to
.