我想做的是:
我有一个博客,想在主帖子下面显示相关帖子
课后<;ActiveRecord::Base
有很多相关的帖子
有许多:帖子,:通过=>;:相关职位
终止
然后在联接模型/表中
类相关post<;ActiveRecord::Base
属于:职位
终止
当然,还有一个名为related\u posts的表,其中有两列post\u id
很明显,这有几个缺陷,我只是不知道如何让这个关联在Rails中工作
这是一个有趣的问题
我刚刚为您的用例创建了一个可用的应用程序
post.related_posts将为您提供所有与post相关的post,而post.reverse_related_posts将为您提供所有与post相关的post
以下是我的模型的外观:
课后<;ActiveRecord::Base
拥有多个:相关的\u帖子\u关联,:class\u name=>;“相关职位”
有很多:相关的帖子,:至=>;:相关帖子关联:source=>;:相关职位
有很多:反向相关的帖子关联,:class\u name=>;“RelatedPost”,:外键=>;“相关职位id”
有很多:反向相关的帖子,:通过=>;:反向相关帖子关联:source=>;:邮递
终止
班级相关职位<;ActiveRecord::Base
属于:职位
属于:相关职位,类别名称=>;“职位”
终止
我的模式:
ActiveRecord::Schema.define(:version=>;20110702194300)do
创建表格“posts”,:force=>;真的吗|
t、 字符串“name”
t、 日期时间“创建时间”
t、 日期时间“更新时间”
终止
创建表格“相关帖子”:force=>;真的吗|
t、 整数“post_id”
t、 整数“相关职位id”
t、 日期时间“创建时间”
t、 日期时间“更新时间”
终止
终止
下面是一个控制台会话的转储,演示了这种关系
ruby-1.9.2-p180:001:0>&燃气轮机;p=Post.create!姓名:“你好”
SQL(23.5ms)插入“posts”(“created_at”,“name”,“updated_at”)值(?,,?)[[“created_at”,Sat,2011年7月2日20:03:43 UTC+00:00],“name”,“Hello”],[“updated_at”,Sat,2011年7月2日20:03:43 UTC+00:00]]
#=>#&书信电报;帖子id:1,名称:“你好”,创建于:“2011-07-02 20:03:43”,更新于:“2011-07-02 20:03:43”>;
ruby-1.9.2-p180:002:0>&燃气轮机;p2=Post.create!名称:“世界”
SQL(1.0ms)插入“posts”(“创建时间”、“名称”、“更新时间”)值(?,?)[[“创建时间”,2011年7月2日星期六20:03:48 UTC+00:00],“名称”、“世界”],[“更新时间”,2011年7月2日星期六20:03:48 UTC+00:00]]
#=>#&书信电报;帖子id:2,名称:“世界”,创建于:“2011-07-02 20:03:48”,更新于:“2011-07-02 20:03:48”>;
ruby-1.9.2-p180:003:0>&燃气轮机;p、 相关职位
Post Load(0.2ms)选择“posts”。*从“posts”内部连接到“posts”上的“related_posts”。“id”=“related_posts”。“related_Post_id”其中的“related_posts”。“Post_id”=1
#=>;[]
ruby-1.9.2-p180:004:0>&燃气轮机;p2.1相关职位
Post Load(0.4ms)选择“posts”。*从“posts”内部连接到“posts”上的“related_posts”。“id”=“related_posts”。“related_Post_id”其中的“related_posts”。“Post_id”=2
#=>;[]
ruby-1.9.2-p180:005:0>&燃气轮机;p、 相关职位<&书信电报;p2
SQL(0.7ms)插入“相关帖子”(“已创建”、“帖子id”、“相关帖子id”、“更新帖子id”)值(?、、?、?)[[“已创建帖子”,Sat,2011年7月2日20:04:01 UTC+00:00],“帖子id”,1],“相关帖子id”,2],“更新帖子”,Sat,2011年7月2日20:04:01 UTC+00:00]]
#=>;[#<;帖子id:2,名称:“世界”,创建于:“2011-07-02 20:03:48”,更新于:“2011-07-02 20:03:48”>;]
ruby-1.9.2-p180:006:0>&燃气轮机;相关职位
相关帖子加载(0.4ms)从“相关帖子”中选择“相关帖子”。*
#=>;[#<;相关帖子id:1,帖子id:1,相关帖子id:2,创建于:“2011-07-02 20:04:01”,更新于:“2011-07-02 20:04:01”>;]
ruby-1.9.2-p180:007:0>&燃气轮机;p2.与职位相关的职位
Post Load(0.2ms)选择“posts”。*从“posts”内部连接到“posts”上的“related_posts”。“id”=“related_posts”。“Post_id”中的“related_posts”。“related_Post_id”=2
#=>;[#<;帖子id:1,名称:“你好”,创建地址:“2011-07-02 20:03:43”,更新地址:“2011-07-02 20:03:43”>;]
ruby-1.9.2-p180:008:0>&燃气轮机;p=邮政优先
后加载(0.5ms)选择“立柱”。*从“立柱”限制1
#=>#&书信电报;帖子id:1,名称:“你好”,创建于:“2011-07-02 20:03:43”,更新于:“2011-07-02 20:03:43”>;
ruby-1.9.2-p180:009:0>&燃气轮机;p2.相关职位<&书信电报;P
SQL(25.7ms)插入“相关帖子”(“创建时间”、“帖子id”、“相关帖子id”、“更新时间”)值(?、、?、?)[[“创建时间”,Sat,2011年7月2日20:05:29 UTC+00:00],“帖子id”,2],“相关帖子id”,1],“更新时间”,Sat,2011年7月2日20:05:29 UTC+00:00]]
帖子加载(0.3ms)选择“帖子”。*从“帖子”内部连接“帖子”上的“相关帖子”。“id”=“相关帖子”。“相关帖子id”中的“相关帖子”。“帖子id”=2
#=>;[#<;帖子id:1,名称:“你好”,创建地址:“2011-07-02 20:03:43”,更新地址:“2011-07-02 20:03:43”>;]
ruby-1.9.2-p180:010:0>&燃气轮机;p2.1相关职位
#=>;[#<;帖子id:1,名称:“你好”,创建地址:“2011-07-02 20:03:43”,更新地址:“2011-07-02 20:03:43”>;]
ruby-1.9.2-p180:011:0>&燃气轮机;出口
加载开发环境(Rails 3.1.0.rc4)
ruby-1.9.2-p180:001:0>&燃气轮机;Post.first.related_posts
后加载(0.3ms)选择“立柱”。*从“立柱”限制1
Post Load(0.2ms)选择“posts”。*从“posts”内部连接到“posts”上的“related_posts”。“id”=“related_posts”。“related_Post_id”其中的“related_posts”。“Post_id”=1
#=>;[#<;帖子id:2,名称:“世界”,创建于:“2011-07-02 20:03:48”,更新于:“2011-07-02 20:03:48”>;]
ruby-1.9.2-p180:002:0>&燃气轮机;Post.last.related_posts
加载后(0.2ms)选择“posts”。*从“posts”中按“posts”排序。“id”DESC LIMIT 1
Post Load(0.2ms)选择“posts”。*从“posts”内部连接到“posts”上的“related_posts”。“id”=“related_posts”。“related_Post_id”其中的“related_posts”。“Post_id”=2
#=>;[#<;帖子id:1,名称:“你好”,创建地址:“2011-07-02 20:03:43”,更新地址:“2011-07-02 20:03:43”>;]