为我的应用程序在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
哪种方法最好,为什么?我计划在我的应用中提供一个活动源,如果这有助于确定最佳方法。
答案 0 :(得分:2)
这个问题的答案取决于Like
是否会有任何属性或方法。
如果仅存在的目的是User
和Thing
之间的HABTM关系,那么使用has_and_belongs_to_many
关系就足够了。在您的示例中,has_many
和belongs_to
是多余的。在这种情况下你需要的只是:
class User < ActiveRecord::Base
has_and_belongs_to_many :things
end
class Thing < ActiveRecord::Base
has_and_belongs_to_many :users
end
另一方面,如果你预计 请注意,我删除了Like
会有一个属性(例如,某些人真的喜欢什么,或喜欢它,等等),那么你可以做到< / p>
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 :things
和belongs_to :user
,因为它们是多余的。