【问题标题】:has_many through several timeshas_many 通过几次
【发布时间】:2015-02-03 21:19:04
【问题描述】:

我想对我的代码提出建议,因为我不知道如何很好地使用 has_many 槽关联。

在我的情况下,用户可以标记为查看帖子。 他们可以创建帖子,也可以写关于帖子的注释。

这就是我所做的:

class User 
  has_many :posts, through: post_views
  has_many :posts, through: comments
  has_many :posts, through: notes
end

class Post
  has_many :users, through: post_views
  has_many :users, through: comments
  has_many :users, through: notes
end

class PostView
  belongs_to: user
  belongs_to: post
end

class Comment
  belongs_to: user
  belongs_to: post
end

class Note
  belongs_to: user
  belongs_to: post
end

可以吗?我该怎么做才能有更好的代码?

编辑 = 在 Mohammad AbuShady 回答之后 类用户 has_many :post_views has_many :viewed_posts,通过: :post_views

  has_many :comments
  has_many :commented_posts, through: comments

  has_many :notes
  has_many :noted_posts, through: notes
end

class Post
  has_many :post_views
  has_many :viewer_users, through: post_views

  has_many :comments
  has_many :comments_users, through: comments

  has_many :notes
  has_many :notes_users, through: notes
end


class PostView
  belongs_to: user
  belongs_to: post
end

class Comment
  belongs_to: user
  belongs_to: post
end

class Note
  belongs_to: user
  belongs_to: post
end

还好吗?

谢谢

洛基

【问题讨论】:

    标签: ruby-on-rails activerecord model


    【解决方案1】:

    您需要与through 部分的连接模型建立关系才能工作,所以

    class User < ActiveRecord::Base
      has_many :post_views
      has_many :viewed_posts, through: :post_views
    end
    class PostView < ActiveRecord::Base
      belongs_to :posts
      belongs_to :users
    end
    class Post < ActiveRecord::Base
      has_many :post_views
      has_many :users, through: :post_views
    end
    

    其他两个模型也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      相关资源
      最近更新 更多