ruby-on-rails - inverse_of - rails references
Rieles: búsqueda de claves externas sin identificación ActiveRecord (3)
Quiero que ActiveRecord
busque por una columna que no sea de identificación de una tabla. Espero que esto quede claro cuando te dé mi código de muestra.
class CoachClass < ActiveRecord::Base
belongs_to :coach
end
class Coach < ActiveRecord::Base
has_many :coach_classes, :foreign_key => ''user_name''
end
Cuando hago un coach_obj.coach_classes
, esto correctamente desencadena
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2)
(2 es la id
ese entrenador aquí, que es mi problema)
Quiero que se active
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = ''David'')
(''David'' es el nombre de user_name
ese entrenador)
user_name
es único y está presente en ambas tablas.
No quiero tener un coach_id
en mi tabla coach_classes
por algún motivo.
Creo que también debe especificar las opciones de clave principal en las asociaciones:
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
Esto especifica el método que devuelve la clave principal del objeto asociado (valor predeterminado para id
).
Hay una opción llamada primary_key
que está establecida por defecto en :id
. Desea usar:
has_many :coach_classes, :foreign_key => :user_name, :primary_key => :user_name
También use estas opciones en la asociación belongs_to
.
Lea más en la documentation .
Necesitas usar finder_sql
:
class Coach < ActiveRecord::Base
has_many :coach_classes, :finder_sql => ''SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")''
end