Rails 3中的用户友好关系模型

时间:2013-01-19 22:55:24

标签: ruby-on-rails ruby-on-rails-3 social-networking

我是一名新的Rails开发人员,我正在尝试建立一个User-Friends关系(Facebook风格),例如它有Friends和Subscription系统。 我已经在很少的博客和书籍上阅读过它,但我觉得我找不到一个非常合适的实现。

  1. 我希望数据库中只有一个条目对应每个关系,所以我使用字段(user_id,friend_id,status,type)建模我的关系表,其中type = {friend,subscriber}和status = {accepted,hold}

  2. 我想实现send_request,accept_request,cancel_request,unfriend,delete_request,subscribe,unsubscribe等所有功能。

  3. 接下来我希望所有功能都遵循abstration规则。像send_request应该像current_user.send_request(@user)一样工作,而不像send_request(@ user,@ friend),并在那里写所有sql。

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

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

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

0 个答案:

没有答案