ruby on rails - que - Rieles: diferencia entre: fuente=> ?? y: class_name=> ?? en modelos
que significa:: en php (2)
Aquí hay ejemplos de uso de: source y: class_name.
has_many :subscribers, through: :subscriptions, source: :user
has_many :people, class_name: "Person"
Como puede ver, cuando usa una tabla completa, termina usando la source
o si usa class_name
.
Mire los ejemplos de opciones en este enlace: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
Hola, tengo problemas para conceptualizar cuándo usar :source
y cuándo usar :class
para mis modelos más complejos.
Aquí tengo un ejemplo de usuarios con amigos.
class User < ActiveRecord::Base
...
has_many :friendships, :dependent => :destroy
has_many :friends, :through => :friendships, :conditions => "status = ''accepted''"
has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = ''requested''", :order => :created_at
has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = ''pending''", :order => :created_at
end
class Friendship < ActiveRecord::Base
attr_accessible :friend_id, :user_id, :status
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => ''friend_id''
end
¿Alguien puede explicar por qué para Friendship es :class_name
lugar de :source
? ¿Esto se debe a que es solo el emparejamiento (has_many +: source, belongs_to +: class_name)?
Conceptualmente son iguales, solo tienen que ser diferentes para diferentes usos.
:source
se usa (opcionalmente) para definir el nombre del modelo asociado cuando está usando has_many through
; :class_name
se usa (opcionalmente) en una simple has many
relaciones. Ambos son necesarios solo si Rails no puede averiguar el nombre de la clase por sí solo. Consulte la documentación de has_many en la API aquí .