0

我创建了两组不同的编码,假设允许用户关注(书签)另一个用户。例如,用户 A 关注用户 B、C 和 D。用户 A 转到他们的收藏夹页面,其中列出了他们关注的所有用户(B、C 和 D)。这将是一种方式。我创建的代码没有执行关注用户的操作,所以我决定遵循 railstutorial Twitter 关注概念。我得到一个“未初始化的常量RelationshipsController”。所以路线有问题。

有人可以看看,也许指出什么是错的?

顺便说一句,这感觉就像为如此简单的事情编写了很多代码……即使我自己在没有遵循教程的情况下编写代码也是如此。我只是希望用户能够为另一个用户页面网址添加书签,将其保存到某个收藏夹页面(本质上是一个书签页面),并为他们提供删除该书签的选项。我认为这甚至不需要数据库。

路线:

  resources :sessions,      only: [:new, :create, :destroy]
  resources :relationships, only: [:create, :destroy]
  resources :users do  
      get 'settings', on: :member  
  end

用户模型:

      has_many :notifications
      has_many :users, dependent: :destroy
      has_many :relationships, foreign_key: "follower_id", dependent: :destroy
      has_many :followed_users, through: :relationships, source: :followed
      has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy
      has_many :followers, through: :reverse_relationships, source: :follower

  def following?(other_user)
    relationships.find_by(followed_id: other_user.id)
  end

  def follow!(other_user)
    relationships.create!(followed_id: other_user.id)
  end

  def unfollow!(other_user)
    relationships.find_by(followed_id: other_user.id).destroy!
  end
4

2 回答 2

2

把它想象成关系是一个多对多关联之间的连接表(即一个用户可以关注很多人,一个用户可以被很多人关注)。你不应该需要关系路线。删除resources :relationships, only: [:create, :destroy]. 此外,请确保您已迁移到关系表中,例如:

class CreateRelationships < ActiveRecord::Migration
  def self.up
    create_table :relationships do |t|
      t.integer  "follower_id"
      t.integer  "followed_id"
    end
  end
  def self.down
    drop_table :relationships
  end
end

并创建了一个关系模型,如:

class Relationship <ActiveRecord::Base            
  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"
end
于 2013-08-28T21:19:02.487 回答
2

我会走这条路:

resources :sessions,      only: [:new, :create, :destroy]
resources :users do  
  get 'settings', on: :member  
  post 'follow', on: :member 
  post 'unfollow, on: :member 
end

在您的用户控制器中:

def follow
  friend = User.find params[:user_id]
  current_user.follow! friend unless current_user.following? friend
  redirect_to friend
end

def unfollow
  friend = User.find params[:user_id]
  current_user.unfollow! friend
  redirect_to friend
end

以及显示您要关注/取消关注的用户时

<% if current_user.following? @user %>
  <%= link_to 'Bookmark', follow_user_path(user_id: @user.id), method: :post %>
<% else %>
  <%= link_to 'Remove Bookmark', unfollow_user_path(user_id: @user.id), method: :post %>
<% end %>
于 2013-08-28T21:26:28.613 回答