Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3中的用户朋友关系模型_Ruby On Rails_Ruby On Rails 3_Social Networking - Fatal编程技术网

Ruby on rails Rails 3中的用户朋友关系模型

Ruby on rails Rails 3中的用户朋友关系模型,ruby-on-rails,ruby-on-rails-3,social-networking,Ruby On Rails,Ruby On Rails 3,Social Networking,我是一名新的Rails开发人员,我正在尝试建立一种用户朋友关系(Facebook风格),比如它既有朋友又有订阅系统。 我在一些博客和书籍上读到过它,但我觉得我找不到一个非常合适的实现 我希望数据库中只有一个条目对应于每个关系,所以我用字段(user\u id,friend\u id,status,type)建模了我的关系表,其中type={friend,subscriber}和status={accepted,hold} 我想实现发送请求、接受请求、取消请求、取消好友、删除请求、订阅、取消订阅等

我是一名新的Rails开发人员,我正在尝试建立一种用户朋友关系(Facebook风格),比如它既有朋友又有订阅系统。 我在一些博客和书籍上读到过它,但我觉得我找不到一个非常合适的实现

  • 我希望数据库中只有一个条目对应于每个关系,所以我用字段(user\u id,friend\u id,status,type)建模了我的关系表,其中type={friend,subscriber}和status={accepted,hold}

  • 我想实现发送请求、接受请求、取消请求、取消好友、删除请求、订阅、取消订阅等所有功能

  • 接下来,我希望所有函数都遵循抽象规则。Like send_request应该像当前用户一样工作。send_request(@user)和send_request(@user,@friend)不同,并在那里写入所有sql

  • 我相信这样的实现可以帮助我将关系扩展到更多类型,如“家庭”、“最好的朋友”等

  • 我看了很多,但找不到facebook式友谊模式的正确实现。请告诉我一些资源,从那里我可以得到一些帮助或帮助我的代码,如果可能的话。我以我开始编码的方式发布了我的用户模型的代码,但我觉得可能有更好的解决方案。请通过一些见解。我知道这个问题不太中肯,也不太主观。管理员:请原谅我违反了Stackoverflow规则

    class用户:destroy
    有很多:关系,:外键=>:user\u id,:dependent=>:destroy
    有很多:反向关系,:外键=>“朋友id”,:类名=>“关系”,:依赖=>:销毁
    有很多:直接的朋友,:通过=>:关系,:条件=>“状态='接受'”,:来源=>:朋友
    有很多:反向朋友,:通过=>:反向关系,:条件=>“状态=‘已接受’”,:来源=>:用户
    有很多:请求的朋友,:通过=>:反向关系,
    :source=>:friend,:conditions=>“status='hold'”,:order=>:created_at
    有很多:待定的朋友,:通过=>:关系,
    :source=>:user,:conditions=>“status='hold'”,:order=>:created_at
    可访问属性:电子邮件、密码、密码确认、记住我
    def朋友
    直接的朋友|反向的朋友
    终止
    .
    .
    .
    

    欢迎来到StackOverflow。你肯定做了功课。我认为这里唯一的错误是你没有问问题。我本来打算通过发布BDD和TDD的链接来回答这个问题,但这似乎是不礼貌的。我的建议是,不要试图让每件事都同时进行。一步一个脚印地往上走,当有些事情不起作用或者你不知道如何继续时,发布一个问题。有很多方法,这取决于你需要在每个“友谊”上保留多少信息(对谷歌来说绝对不是一件容易的事情)。rails 2的书也很不错:

    class User < ActiveRecord::Base
     devise :database_authenticatable, :registerable, :recoverable, :rememberable,    :trackable, :validatable
    
     has_one :profile, :dependent => :destroy
    
     has_many :relationships, :foreign_key => :user_id, :dependent => :destroy
     has_many :reverse_relationships, :foreign_key => "friend_id",  :class_name =>    "Relationship", :dependent => :destroy
    
     has_many :direct_friends, :through => :relationships, :conditions => "status =    'accepted'", :source => :friend
     has_many :reverse_friends, :through => :reverse_relationships, :conditions => "status = 'accepted'", :source => :user
    
     has_many :requested_friends, :through => :reverse_relationships,
    :source => :friend, :conditions => "status = 'hold'", :order => :created_at
     has_many :pending_friends, :through => :relationships, 
    :source => :user, :conditions => "status = 'hold'", :order => :created_at
    
      attr_accessible :email, :password, :password_confirmation, :remember_me
    
     def friends
       direct_friends | reverse_friends
     end
    
    .
    .
    .