Как использовать ассоциацию внутри частичных рельсов? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть модель задачи:

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

Обычно у пользователя много задач, а у каждой задачи много дочерних.

Я сделал это в представлении:

<%= render @tasks %>

И он работал нормально, когда структура данных была одномерной.

Однако я продолжаю получать сообщение об ошибке "(SQLite3 :: SQLException: нет такого столбца: tasks.task_id: ВЫБРАТЬ" tasks ". * ИЗ" 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 голосов
/ 23 марта 2012

Вам нужно восстановить свою ассоциацию.

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

Поскольку приведенный ниже вопрос доказал, что в документации по Rails есть ошибка.

В Ruby on Rails указан неверный документ по связям Activerecord?

Для ознакомления посетите вопрос ниже и посмотрите, как ассоциации используются в этом ответе.

Модель Rails has_many с несколькими иностранными ключами

0 голосов
/ 22 марта 2012

foreign_key

Укажите внешний ключ, используемый для ассоциации.По умолчанию это имя ассоциации с суффиксом _id.Таким образом, класс, который определяет ассоциацию own_to: person, будет использовать «person_id» в качестве значения по умолчанию: foreign_key.Точно так же own_to: favourite_person,: class_name => "Person" будет использовать внешний ключ "fav__person_id".

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

Возможно, вы захотите использовать pk, я не уверен насчет структуры таблицы.

Кроме того, вы можете захотеть иметь таблицу «многие ко многим», даже если это один из способов (один ко многим) для более чистых данных.Это будет зависеть от процессов, которые вам нужны \ использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...