has_many через: как получить идентификатор строки в таблице соответствий? - PullRequest
0 голосов
/ 05 августа 2009

У меня есть 2 модели «предмет» и «активность». «Предмет» может иметь много «действий» (ограниченное количество действий, используемых всеми предметами). Чтобы было понятнее: это представлено таблицей с одним элементом на строку, одним действием на столбец и чем-то / ничем на пересечении, если в матрицах таблицы существует линия.

чтобы увидеть изображение (стоит 1000 слов :)): http://tinypic.com/r/33ygtj9/3

Отношения (я думаю) установлены правильно: item has_many матриц, item has_many действий через матрицы

активность has_many матриц, активность has_many элементов через матрицы

матрица принадлежит элементу, матрица принадлежит деятельности

Некоторая дополнительная / полезная информация: - матрица графически представлена ​​таблицей с одним элементом на строку, одним действием на столбец и OK / KO на пересечении, если в матрицах таблицы существует линия. - у меня есть 2 другие модели на картинке: модель курса и модель главы (у курса много глав, у главы много пунктов) - Все происходит в режиме просмотра «Показать»

До сих пор мне удалось напрямую создать строку (без прохождения формы) в таблице матриц с помощью activity_id и item_id. Однако я пытаюсь удалить строку, потому что я не понимаю, как получить доступ к значению matrices.id.

Единственный способ, который я нашел, для каждого элемента - циклически просмотреть все доступные действия для этого элемента в хэше (key = activity_id, value = matrices_id). Если действие недоступно, я отображаю ОК + ссылку для создания строки в матрицах, ОК + ссылку для уничтожения.

Есть ли более простой / более «рельсовый» способ сделать это? то есть избавиться от хеша?

спасибо за вашу помощь.

Pierre

Ответы [ 2 ]

0 голосов
/ 05 августа 2009

ОК, я тупой ...

Я сосредоточился на строках, где я знаю, что item.matrices [x] не был nil ... и ошибка произошла из строк, где items.matrices [x] равен nil ...

Таким образом, все решается простым добавлением атрибута условии items.matrices [x] .nil?

Это забавная вещь в программировании: тратить время на такие вещи ... но учиться в любом случае:)

0 голосов
/ 05 августа 2009

Итак:

class Item
  has_many :activities, :through => :matrix
end

class Activity
  has_many :items, :though => matrix
end

class Matrix
   belongs_to :item
   belongs_to :activity
end

Во-первых, я предполагаю, что вы записываете больше информации в матрицу, иначе вы могли бы использовать отношения has_and_belongs_to_many между элементами и действиями.

Вы можете добавить отношения has_many, чтобы упростить задачу:

class Item
  has_many :activities, :through => :matrix
  has_many :matrices
end

class Activity
  has_many :items, :though => matrix
  has_many :matrices
end

class Matrix
   belongs_to :item
   belongs_to :activity
end

Я не уверен, как связаны модели курса и главы, поэтому трудно что-либо сказать о них.

Вид может выглядеть примерно так:

@chapter.items.include?(course)? link_to("Destroy", link_to_destroy) : link_to("Create", create_a_line) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...