Mongoid Twitter-Stil Folgenden können keine Kriterien / Bedingungen für die Beziehung Array angeben
-
28-09-2019 - |
Frage
Ich bin mit meinem Latein am Ende versuchen, diese Fehler zu behandeln. Im Grunde habe ich die folgenden Benutzer und Beziehungsmuster erstellt, Mongoid mit meiner Datenbank zu handhaben. Dies scheint ein nahezu Kopie der Beispiel am unteren Rand der Seite hier . Ich versuche, eine der folgenden Bedingungen zu nennen:
user1.relationships.find(:all, :conditions => {:rel_user => user_in_question, :rel_type => "following" })
user1.relationships.all(:conditions => {:rel_user => user_in_question, :rel_type => "following" })
user1.relationships.where(:rel_type => "following")
user1.relationships.following #with a named scope
Diese scheinen alle nur den gesamten Beziehungen Array zurück; sie suchen nicht nach Kriterien durch. Die find () Methode wirft auch eine Fehlermeldung, dass es nur 1 Argument nehmen. Die im_following? Methode liefert immer wahr.
Ich bin mir nicht sicher, ob es besser ist, eine Postleitzahl in-line oder von Kern, so sind hier die Logen:
user.rb
user_follow_spec.rb
relationship.rb
Ich würde jede Hilfe dankbar.
Lösung
Rockmanioff, ich habe stieß auch auf der gleichen Ausgabe. Sie könnten auch an dieser zu suchen. Mongoid Pläne auf die Unterstützung dieser Funktion auf ihre Release Candidate-Version. Vorerst müssen wir die Dinge manuell tun.
class User
include Mongoid::Document
include Mongoid::Timestamps
references_many :fans, :stored_as => :array, :class_name => 'User', :inverse_of => :fan_of
references_many :fan_of, :stored_as => :array, :class_name => 'User', :inverse_of => :fans
def become_fan_of user
fan_of << user
self.save
user.fans << self
user.save
end
def is_a_fan? user
fan_of_ids.include? user.id
end
def unfan user
fan_of_ids.delete user.id
self.save
user.fan_ids.delete self.id
user.save
end
...
end
In-Konsole können Sie tun:
User.first.become_fan_of User.last
User.first.is_a_fan? User.last
User.first.unfan User.last
In Ihrem Fall Sie vielleicht „fan / fan_of“ für „Anhänger / folgenden jeweils“ ersetzen. Hoffe, das hilft.
Andere Tipps
Ich würde Ihnen raten, Ihre Beziehungen zu vereinfachen, indem selbstbezüglicher Association. Schauen Sie sich meine Antwort auf diese Frage:
Ich denke, das ist ziemlich nahe an den Verein Sie wollen:
class User
include Mongoid::Document
references_many :following,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :followed_by
references_many :followed_by,
:class_name => 'User',
:stored_as => :array,
:inverse_of => :following
end
# let's say we have users: al, ed, sports_star, movie_star
sports_star.followed_by << al
movie_star.followed_by << al
sports_star.followed_by << ed
movie_star.followed_by << ed
movie_star.followed_by # => al, ed
al.following # => sports_star, movie_star
Versuchen Sie diese:
class User
# follows and followers
references_many :follows, :stored_as => :array , :inverse_of => :followers ,:class_name=>"User"
references_many :followers, :stored_as => :array , :inverse_of => :follows ,:class_name=>"User"
def followers
followers.map
end
end