如何在rails部分内部使用关联?

时间:2012-03-22 16:01:56

标签: 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 :: SQLException:no such column:tasks.task_id:SELECT”tasks“。* FROM”tasks“WHERE”tasks“。”task_id“= 138)”添加后关联。我期待“parent_id”,因为这就是模型应该引用的内容。

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

## inside _task.html.erb
<%= form_for task.children.build do |f| %>
  <%= f.text_area :description %>
<% end %>

但是它不起作用,因为task.children得到一个错误,说该任务没有列“task_id”,当它应该引用“parent_id”时。有没有解决这个问题的方法?

2 个答案:

答案 0 :(得分:0)

  

foreign_key

     

指定用于关联的外键。通过   默认这被认为是与a的关联的名称   “_id”后缀。所以定义了belongs_to:person关联的类   将使用“person_id”作为默认值:foreign_key。同样的,   belongs_to:favorite_person,:class_name =&gt; “人”将使用   “favorite_person_id”的外键。

belongs_to :children, :class_name => "Task",:foreign_key => "parent_id"

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

此外,您可能希望拥有一个多对多的表,即使它是一种方式(一对多)更清洁的数据。这取决于您需要使用的过程。

答案 1 :(得分:0)

您需要重建您的关联。

has_many :children, :class_name => "Task", :foreign_key => "parent_id"
belongs_to :parent, :class_name => "Task"

因为以下问题证明Rails文档中存在错误。

Ruby on Rails guides document on Activerecord association incorrect?

供您参考,请访问以下问题,并了解如何在此答案中使用关联。

Rails Model has_many with multiple foreign_keys