Pourquoi la table des connexions est-elle mise à jour lorsque j'appelle @ user.connections pour les éléments suivants?ActiveRecord Array Array Array vs Concatenated Array
Connexion Modèle
class Connection < ActiveRecord::Base
belongs_to :left_nodeable, :polymorphic => true
belongs_to :right_nodeable, :polymorphic => true
# Statuses:
PENDING = 0
ACCEPTED = 1
named_scope :pending, :conditions => { :connection_status => PENDING }
named_scope :accepted, :conditions => { :connection_status => ACCEPTED }
end
Modèle utilisateur
class User < ActiveRecord::Base
has_many :left_connections, :as => :left_nodeable, :class_name => 'Connection', :conditions => {:left_nodeable_type => 'User', :right_nodeable_type => 'User'}
has_many :right_connections, :as => :right_nodeable, :class_name => 'Connection', :conditions => {:right_nodeable_type => 'User', :left_nodeable_type => 'User'}
def connections
self.left_connections << self.right_connections
end
end
Si j'utilise:
def connections
self.left_connections + self.right_connections
end
Ensuite, le modèle fonctionne ok, mais je ne peux pas utiliser l'une de mes méthodes de named_scope.
donc je suppose que mes questions se résume à ...
Quelle est la différence entre le « < < » et l'opérateur « + » sur un ActiveRecord? Pourquoi l'utilisation de "< <" change-t-elle la base de données et l'utilisation de "+" provoque l'échec des méthodes named_scope?
Merci Garrett. J'ai mis à jour la question avec des étendues nommées qui échouent dans le modèle de connexion. Donc, la question restante serait "comment puis-je appeler @ user.connections.pending? – BenB
Ah, donc le problème est .connections() retourne un tableau, et vous ne pouvez pas utiliser une portée sur un tableau. @ user.connections.reject {| c | c.connection_status == ACCEPTED} ' –
ou vous pouvez créer une méthode/portée de classe de connexion' self.with_user (user_id) 'qui retourne' where ("user_id =?", user_id) 'et enchaînez-les (par exemple' Connection.with_user (@ user.id) .pending'). Désolé pour la syntaxe rails 3, mais cela fait longtemps que j'ai utilisé les requêtes rails 2 –