如何将用户个人资料添加到收藏夹?

时间:2014-02-04 04:56:21

标签: ruby-on-rails ruby-on-rails-4

所以,我有一个包含许多用户/用户配置文件的应用程序。我想允许用户点击“添加到收藏夹”按钮,并将他们正在查看的个人资料添加到他们的收藏夹标签中。因此,当他们点击收藏夹标签时,他们将能够看到他们最喜欢的所有用户个人资料。

我正在使用HMT协会,如下所示:

favorite_relationship.rb

class FavoriteRelationship < ActiveRecord::Base
  # attributes are ( user_id and favourite_id )
  belongs_to :favorite
  belongs_to :user
end

favorite.rb

class Favorite < ActiveRecord::Base
  has_many :favorite_relationships
  has_many :users, through: :favorite_relationships
end

user.rb (适当的snippit)

  has_many :favorite_relationships
  has_many :favorites, through: :favorite_relationships
  has_many :people_who_favorited_me, through: :favorite_relationships, foreign_key: "favorite_id"

favorites_controller.rb (这是我知道的灾难)

class FavoritesController < ApplicationController
 before_filter :find_user

  def index
    @favorites = @user.favorites
  end

  def create
    @currentuser = current_user
    @user = User.find params[:id]
    @currentuser.favorites << @user
  end

  def destroy
    @favorite = @user.favorites.find_by_user_id params[:id]
    @favorite.destroy unless @favorite.blank?
  end
  end

  private

  def find_user
    @user = current_user
  end

end

我不知道怎么做视图......任何帮助都会是一个巨大的帮助。

先谢谢。

1 个答案:

答案 0 :(得分:0)

我会考虑做以下事情:

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :favorite, class_name: 'User'
end

如果您不打算使用收藏夹其他用户,那么您甚至可以使用HABTM。

然后:

class User < ActiveRecord::Base
  has_many :favorites
  has_many :favorite_users, through: :favorites, source: :favorite
  has_many :users_who_favorited_me, through: favorites, source: :user
end

不需要第三个实体......至少在你描述的场景中没有。然后,您可以执行以下操作:

def create
  @user = User.find params[:id]
  current_user.favorites << Favorite.new({favorite: @user}) # Expects the same association type, ie. Favorites wants Favorites
  # OR like this
  # current_user.favorites.create({favorite: @user})
end

def destroy
  @favorite = current_user.favorites.find_by_favorite_id params[:id]
  @favorite.destroy

或者

如果你在掌握这个概念时遇到困难,请考虑使用/理解一个宝石....

https://github.com/tcocca/acts_as_follower/