Монговидный стиль Twitter следующий, не может указывать критерии / условия для массива отношений

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

  •  28-09-2019
  •  | 
  •  

Вопрос

Я в конце моего змея, пытаясь справиться с этими ошибками. По сути, я создал следующие шаблоны пользователей и отношений, используя Mongoid для обработки моей базы данных. Это кажется ближней углеродной копией примера в нижней части страницы здесь. Отказ Я пытаюсь позвонить любому из следующих действий:

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

Это, кажется, просто вернут весь массив отношений; Они не ищут критериями. Метод FACE () также выбрасывает ошибку, говорящую, что она может принимать только 1 аргумент. Im_following? Метод всегда возвращает true.

Я не уверен, лучше ли разместить код в строке или от гек или от того, поэтому вот как цики:

user.rb.
user_follow_spec.rb.
отношение .rb.

Буду признателен за любую помощь.

Это было полезно?

Решение

Rockmanioff, я также столкнулся с той же проблемой. Вы можете посмотреть на это также. Монгоиды планы на поддержку этой функции на их версии отпуска. На данный момент мы должны делать вещи вручную.

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 

В консоли вы можете сделать:

User.first.become_fan_of User.last
User.first.is_a_fan? User.last
User.first.unfan User.last

В вашем случае вы можете заменить «вентилятор / файл_OF» для «подписчиков / следующих соответственно». Надеюсь это поможет.

Другие советы

Я советую вам упростить ваши отношения, используя самообладанные ассоциации. Проверьте мой ответ на этот вопрос:

Как: пользователь имеет фанаты

Я думаю, что это довольно близко к ассоциации, которую вы хотите:

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

Попробуй это:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top