[英]How can I relate two models in two different ways through activerecord?
[英]How do I define ActiveRecord relationships between two models that relate to each other in two different ways?
在我的应用程序中,我有类User,Video和Vote。 用户和视频可以通过两种不同的方式相互关联:作为一对多或多对多。 前者是用户提交视频(一个用户可以提交许多视频)。 后者是用户对视频进行投票时(用户通过投票获得许多视频,反之亦然)。 这是我的代码,它不起作用(我想 - 我可能在视图中做错了)。 请帮助我理解构建这些关联的正确方法:
class User < ActiveRecord::Base
has_many :videos, :as => :submissions
has_many :votes #have tried it without this
has_many :videos, :as => :likes, :through => :votes
end
class Vote < ActiveRecord::Base
belongs_to :video
belongs_to :user
end
class Video < ActiveRecord::Base
belongs_to :user
has_many :votes #have tried it without this . . . superfluous?
has_many :users, :as => :voters, :through => :votes
end
我没有去检查,但它是这样的:
代替
has_many :videos, :as => :likes, :through => :votes
采用
has_many :likes, :class_name => "Video", :through => :votes
与底部相同:
has_many :users, :as => :voters, :through => :votes
变
has_many :voters, :class_name => "User", :through => :votes
:as
用于多态关联。 有关详细信息,请参阅文档中的本章 。
class User < ActiveRecord::Base
has_many :videos # Submitted videos
has_many :votes
has_many :voted_videos, :through => :votes # User may vote down a vid, so it's not right to call 'likes'
end
class Vote < ActiveRecord::Base
belongs_to :video
belongs_to :user
end
class Video < ActiveRecord::Base
belongs_to :user
has_many :votes
has_many :voters, :through => :votes
end
更多细节可以在这里找到: http : //guides.rubyonrails.org/association_basics.html
希望它有帮助=)
谢谢你们的帮助,绝对指出了我正确的方向。 这是工作代码:
class User < ActiveRecord::Base
has_many :videos, :as => :submissions
has_many :votes
has_many :likes, :source => :video, :through => :votes
end
class Vote < ActiveRecord::Base
belongs_to :video
belongs_to :user
end
class Video < ActiveRecord::Base
belongs_to :user
has_many :votes
has_many :voters, :source => :user, :through => :votes
end
PS我把它保持为:喜欢因为在这个应用程序中他们将无法进行投票,只能投票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.