【发布时间】:2025-12-05 01:30:01
【问题描述】:
我有一个用户可以关注多个名人的关系设置。
class User < ActiveRecord::Base
has_many :followings, :dependent => :destroy
has_many :celebrities, :through => :following
end
class Following < ActiveRecord::Base
belongs_to :user
belongs_to :celebrity
end
class Celebrity < ActiveRecord::Base
has_many :followings, :dependent => :destroy
has_many :users, :through => :following
end
我想做的是创建允许用户执行以下操作的方法:关注/取消关注名人,指明用户是否关注名人。同样在用户模型中,我想显示他们关注的名人列表,在名人模型中显示关注他们的用户。我已经尝试为前两种方法这样做,但不是 100% 确定如何编写其余的方法。
class User < ActiveRecord::Base
...
def follow(celebrity)
followings.create(celebrity_id: celebrity.id)
end
def unfollow(celebrity)
followings.find_by(celebrity_id: celebrity.id).destroy
end
def following?(celebrity)
end
def follows
end
end
class Celebrity < ActiveRecord::Base
def followers
end
end
我在正确的轨道上吗?此外,确保用户只能关注名人一次以防止创建额外的 followings 实例的最佳方法是什么?
【问题讨论】:
-
你做错了,关注和取消关注操作不应该在用户模型中,而是在 users_controller 中。
-
我试图按照本教程中的操作方式进行操作(他在连接表的控制器中使用了这两种方法:railstutorial.org/book/following_users
-
当然,你应该在控制器中做,而不是在模型中!
标签: ruby-on-rails activerecord model associations jointable