Mongoid Twitter-Stil Folgenden können keine Kriterien / Bedingungen für die Beziehung Array angeben

StackOverflow https://stackoverflow.com/questions/3086000

  •  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.

War es hilfreich?

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:

How-to: Benutzer haben Fans

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top