所以,我有一个包含许多用户/用户配置文件的应用程序。我想允许用户点击“添加到收藏夹”按钮,并将他们正在查看的个人资料添加到他们的收藏夹标签中。因此,当他们点击收藏夹标签时,他们将能够看到他们最喜欢的所有用户个人资料。
我正在使用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
我不知道怎么做视图......任何帮助都会是一个巨大的帮助。
先谢谢。
答案 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
端
如果你在掌握这个概念时遇到困难,请考虑使用/理解一个宝石....