положить has_many: через в игру и использовать его в реальной форме - PullRequest
3 голосов
/ 17 мая 2011
class Allowedevent < ActiveRecord::Base
    :belongs_to :room
    :belongs_to :event
end

class Room < ActiveRecord::Base
    :has_many :allowedevents
    :has_many :events => :through => allowedevents
end

class Event< ActiveRecord::Base
    :has_many :allowedevents
    :has_many :rooms=> :through => allowedevents
end

Я испытываю трудности с приведением вышеуказанных отношений в форму или играю с ними в консоли.

Вопросы:

  • Теперь скажите, что я сохраняю комнату. Нужно ли явно добавлять идентификаторы в таблицу allowedevents? я должен сделать это?

    комната = Room.new; room.title = "test"; room.allowedevents = "" ...?

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

  • В основном я хочу спросить, как сохранить комнату в базе данных, которая имеет много allowedevents, используя вышеуказанные отношения. Должен ли я проходить через пользовательский ввод и сохранять каждый в allowedevents? есть ли лучший способ?

  • Я получил вышеупомянутое из эпизода railscasts, есть ли эпизод на railscasts, который на самом деле дает представление о том, как использовать его в переднем конце?

1 Ответ

2 голосов
/ 17 мая 2011

Внешний интерфейс может быть страницей редактирования для комнаты, в которой перечислены все события в виде набора флажков.Затем вы можете отметить события, на которые эта комната может быть зарезервирована.

Обрабатывать это в модели комнаты немного сложнее.Некоторые люди рекомендуют использовать accepts_nested_attributes_for, но когда пользователи позже снимают флажки, это не приводит к автоматическому удалению отношения.

Метод accepts_nested_attributes_for имеет опцию для удаления записей, но вынуждает вас передавать в отдельную "_delete "параметр для каждой записи, которую вы хотите удалить.Это все хорошо, если вы хотите использовать javascript для добавления этого виртуального параметра «_delete» в форму после того, как кто-то снимает флажок, но если вы не хотите полагаться на javascript, он становится сложным.

Поэтому я принял решение отказаться от acceptpts_nested_attributes_for и просто накатить свое собственное решение, вероятно, похожее на то, как Райан Бейтс решил эту проблему до того, как существует acceptpts_nested_attributes_for.

Вместо публикации моего решения, вот ссылка на старый эпизод RailsCastкоторый объясняет, как обрабатывать вложенные модели в сложной форме:

http://railscasts.com/episodes/73-complex-forms-part-1

Если у кого-то еще есть новый подход к использованию accepts_nested_attributes_for с флажками в отношении has_many: through style, я бы хотелуслышать это.

...