Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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 如何在rails部分中使用关联?_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 如何在rails部分中使用关联?

Ruby on rails 如何在rails部分中使用关联?,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有一个任务模型: ## Task has_many :children, :class_name => "Task" belongs_to :parent, :class_name => "Task", :foreign_key => "parent_id" 基本上,用户有许多任务,每个任务都有许多子任务 我在一个视图中这样做: <%= render @tasks %> 当数据结构为一维时,它可以正常工作 但是,添加关联后,我不断收到错误消息SQLite3::

我有一个任务模型:

## Task
has_many :children, :class_name => "Task"
belongs_to :parent, :class_name => "Task", :foreign_key => "parent_id"
基本上,用户有许多任务,每个任务都有许多子任务

我在一个视图中这样做:

<%= render @tasks %>
当数据结构为一维时,它可以正常工作

但是,添加关联后,我不断收到错误消息SQLite3::SQLException:没有这样的列:tasks.task_id:SELECT tasks.*FROM tasks WHERE tasks.task_id=138。我期待的是家长id,因为这是模型应该指的

我猜想这是因为rails如何隐式地将局部变量任务与其类任务连接起来。例如,我想在注释中构建一个表单,如下所示:

## inside _task.html.erb
<%= form_for task.children.build do |f| %>
  <%= f.text_area :description %>
<% end %>
但它不起作用,因为task.children会收到一个错误,说task没有列task\u id,而它应该引用父\u id。有办法解决这个问题吗

外键

指定用于关联的外键。通过 默认情况下,这被猜测为与 “_id”后缀。因此,一个定义a_的类属于:person关联 将使用“person\u id”作为默认值:外键。同样地, 属于:favorite\u person,:class\u name=>person将使用 “最喜爱的人”id的外键

您可能想使用pk,我不确定表的结构


此外,您可能希望有一个多对多的表,即使它是用于更干净数据的单向一对多。它将取决于您需要\使用的进程。

您需要重建关联

has_many :children, :class_name => "Task", :foreign_key => "parent_id"
belongs_to :parent, :class_name => "Task"
因为下面的问题证明了Rails文档中存在错误

为了便于参考,请访问下面的问题,并查看如何在此答案中使用关联


我不明白答案。你是说我应该把这种联系建模为父母和孩子相互指向对方,并且没有太多?正如我在上面所写的,我已经在我的属于父关联中有了:foreign\u key=>parent\u id。另外,我不明白你为什么建议我将其建模为属于:儿童,而不是有很多:儿童。
has_many :children, :class_name => "Task", :foreign_key => "parent_id"
belongs_to :parent, :class_name => "Task"