Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 “了解Rails ActiveRecord”;“单一型号”;自连接_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 3 “了解Rails ActiveRecord”;“单一型号”;自连接

Ruby on rails 3 “了解Rails ActiveRecord”;“单一型号”;自连接,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我很难理解如何在Rails中实现单个模型的自连接。 简单地解释了自联接,但没有提供足够的信息,关于这类联接的每个示例或帖子都引用了友好的Friend Railcast示例,该示例不是单一模型自联接,如中所述 这个想法是一个模型,它有很多并且属于它自己,而不需要一个单独的关系表。我认为需要一个单独的表的唯一原因是,如果您希望关系包含比关系更多的信息。e、 g.“最好的朋友”,“几乎不认识他们” 我有一个简单的Post模式: create_table "posts", :force => tr

我很难理解如何在Rails中实现单个模型的自连接。 简单地解释了自联接,但没有提供足够的信息,关于这类联接的每个示例或帖子都引用了友好的Friend Railcast示例,该示例不是单一模型自联接,如中所述

这个想法是一个模型,它有很多并且属于它自己,而不需要一个单独的关系表。我认为需要一个单独的表的唯一原因是,如果您希望关系包含比关系更多的信息。e、 g.“最好的朋友”,“几乎不认识他们”

我有一个简单的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
父帖子id是对其他帖子id的自引用。posts.rb模型定义了以下关系:

class Post < ActiveRecord::Base
  has_many :replies, :class_name => "Post"
  belongs_to :parent_post, :class_name => "Post",
    :foreign_key => "parent_post_id"
end
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 = post.parent_post
这可能都是一些语法错误理解。所以,提前感谢任何能给我一些感觉的人。我浏览了所有SO和博客文章,没有人尝试过指南中描述的单模型自引用自连接方法


任何人如果提供的解释没有指向使用单独关系表的Friendly Friend示例,我将获得积分。

我缺少“parent\u post\u id”的has\u many外键。设置后,post.reply将按父项post\u id引用其他post实例

posts.rb模型定义了以下关系:

class Post < ActiveRecord::Base
  has_many :replies, :class_name => "Post"
  belongs_to :parent_post, :class_name => "Post",
    :foreign_key => "parent_post_id"
end
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
class Post“Post”,
:foreign\u key=>parent\u post\u id
属于:父项发布,:类发布名称=>“发布”,
:foreign\u key=>parent\u post\u id
结束

我现在可以创建帖子,为不同的帖子分配一个父帖子id,然后再获取所有回复任何父帖子的帖子。

如果您按照预期的方式描述发生了什么/没有发生什么,那么就更容易开始了。另外,像
按树行事
这样的东西是单表、单模型自参考的——你考虑过这样的东西吗?我想我考虑过。我希望能够调用post.repress并获得一组基于父post的post实例,由它的父post\u id=post\u id填充。这就解释了您的操作。不是发生了什么事,很抱歉。post.responses抛出了一个SQL错误。见下面我的答案。这个错误是一个SQL错误,最终让我明白了问题所在。post.replies正在生成SQL,其中:replies字段键默认为post\u id。而不是我想要的父项\u post\u id。一旦我将:foreign_key添加到:repress,now post.repress将查询使用父_post_id的帖子。