如何在rails中设置自引用多态关系?

时间:2012-07-30 06:18:32

标签: ruby-on-rails ruby-on-rails-3 polymorphism

我有3个模特

  • User
  • Journal
  • Post

关于这些

可以假设几件事
  • User has_many :journals
  • Journal has_many :posts

我希望用户能够订阅给我网站上的其他用户和特定期刊。

我在想我需要一个看起来像这样的多态Subscription模型

class CreateSubscriptions < ActiveRecord::Migration
  def change
    create_table :subscriptions do |t|
      t.integer :user_id
      t.references :subscribable, :polymorphic=>true
      t.timestamps
    end
  end
end

但这就是我被困住的地方。我不知道如何在我的User模型中设置多态关系。

我希望能够得到以下内容:

  • @user.watched_users
  • @user.watched_journals
  • @user.followers
  • @journal.followers

有人可以帮忙吗?文档在这方面很少,我知道这些可能是一件真正的苦差事。

^ _ ^

1 个答案:

答案 0 :(得分:1)

虽然我理解想要让用户订阅任意对象的愿望,但实际上,你最终会以不同的方式处理这些不同的订阅,所以至少现在(直到你发现自己想要订阅其他订阅)网站上的对象),将它们分开(YAGNI)。

您可以通过每个关系的简单连接表来执行此操作。 How do I do reflexive self-join relationships in ActiveRecord?上的答案在http://railscasts.com/episodes/163-self-referential-association

中得出了一个很好的例子