繁体   English   中英

在导轨HABTM与HM / BT中模拟“喜欢”

[英]Modeling “Likes” in rails HABTM vs HM/BT

为我的应用在rails中建模“喜欢”的最佳方法是什么。 我可以执行以下操作之一:

class User < ActiveRecord::Base
  has_many :things

  has_many :likes
  has_many :liked_things, through: :likes, source: :thing
end

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :thing
end

class Thing < ActiveRecord::Base
  belongs_to :user

  has_many :likes
  has_many :liking_users, through: :likes, source: :user
end

要么

class User < ActiveRecord::Base
  has_many :things

  has_and_belongs_to_many :things
end

class Thing < ActiveRecord::Base
  belongs_to :user

  has_and_belongs_to_many :users
end

哪种方法最好,为什么? 我还计划在我的应用程序中添加一个活动供稿,以帮助确定最佳方法。

这个问题的答案取决于Like是否会具有任何属性或方法。

如果其唯一存在的目的是作为UserThing之间的has_and_belongs_to_many关系,则使用has_and_belongs_to_many关系就足够了。 在您的示例中, has_manybelongs_to是多余的。 在这种情况下,您需要做的只是:

class User < ActiveRecord::Base
  has_and_belongs_to_many :things
end

class Thing < ActiveRecord::Base
  has_and_belongs_to_many :users
end

另一方面,如果您预计“ Like将具有一个属性(例如,某人可能真的喜欢某个东西或喜欢它,等等),那么您可以

class User < ActiveRecord::Base
  has_many :likes
  has_many :liked_things, through: :likes, source: :thing
end

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :thing
end

class Thing < ActiveRecord::Base
  has_many :likes
  has_many :liking_users, through: :likes, source: :user
end

请注意,我删除了has_many :thingsbelongs_to :user因为它们是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM