gpt4 book ai didi

ruby-on-rails-3 - 了解 Rails ActiveRecord "single model"自连接

转载 作者:行者123 更新时间:2023-12-03 23:22:13 26 4
gpt4 key购买 nike

我很难理解如何在 Rails 中实现单个模型自联接。
Guide to ActiveRecord Associations section 2.10简要解释了自联接,但没有提供足够的信息,并且每个示例或关于此的帖子都引用了非单一模型自联接的 Friendly Friend Railcast 示例,如 Rails Guide section 2.10 中所述.

这个想法是一个 has_many 和 belongs_to 本身的模型,而不需要单独的关系表。我看到需要单独表的唯一原因是,如果您希望关系包含更多信息而不仅仅是关系。例如“最好的 friend ”,“几乎不认识他们”

我有一个简单的 Post 架构:

create_table "posts", :force => true do |t|
t.datetime "posted"
t.string "nick"
t.string "title"
t.text "content"
t.integer "parent_post_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

parent_post_id 是对其他 Post post_id 的自引用。 post.rb 模型定义了关系:
class Post < ActiveRecord::Base
has_many :replies, :class_name => "Post"
belongs_to :parent_post, :class_name => "Post",
:foreign_key => "parent_post_id"
end

在 Controller 或 View 中,我希望能够执行以下操作:
@posts.each do |post|
...
@replies = post.replies
@replies.each do |reply|
...
end
end

或查找帖子的父级:
@parent_post = post.parent_post

这可能都是一些语法误解。所以提前感谢任何可以给我一些理智的人。我浏览了所有 SO 和博客文章,没有人尝试过指南中描述的单一模型自引用自联接方法。

任何提供不指向使用单独关系表的友好 friend 示例的解释的人的分数。

最佳答案

我错过了“parent_post_id”的 has_many 外键。一旦设置,post.replies 将通过 parent_post_id 引用其他 Post 实例。

post.rb 模型定义了关系:

class Post < ActiveRecord::Base
has_many :replies, :class_name => "Post",
:foreign_key => "parent_post_id"
belongs_to :parent_post, :class_name => "Post",
:foreign_key => "parent_post_id"
end

我现在可以创建帖子,将 parent_post_id 分配给不同的帖子,然后获取所有回复任何父帖子的帖子。

关于ruby-on-rails-3 - 了解 Rails ActiveRecord "single model"自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com