У меня есть альбом модели, который имеет ассоциацию has_many: trough с именем Track. По сути, альбом может содержать несколько дорожек, но дорожка может принадлежать более чем одному альбому одновременно (отсюда и сквозная ассоциация «Список треков»).
У меня есть приложение RESTful с формой (с помощью formtastic), которая выводит все атрибуты треков, например, так:
form.semantic_fields_for :tracks do | builder |
builder.fields
end
Форма выводит все связанные поля дорожек, и я могу их обновить, все работает.
Теперь я хочу добавить другой трек для добавления нового трека в существующий альбом. В этом представлении я не хочу отображать все поля ввода для существующих дорожек, а только поля для одной новой ассоциации, которую я пытаюсь создать.
Я пытался найти информацию о том, как это сделать, и лучшее, что я придумал, это:
form.semantic_fields_for :tracks, Track.new do | builder |
builder.fields
end
Это выводит единый набор входов Трек, как и нужно, и я могу отправить форму, и трек будет создан и связан с продуктом - но только если нет ошибок проверки.
Проблема связана с проверками. Если произойдет сбой, приложение снова отобразит то же представление, но все входные данные снова будут пустыми (все данные, действительные или нет, потеряны, а встроенные сообщения об ошибках для Formtastic также пропали):
form.semantic_fields_for :tracks, Track.new do | builder |
builder.fields
end
Я считаю, что это потому, что я делаю Track.new, хотя в параметрах запроса уже есть объект, содержащий данные и сообщения об ошибках. Это не хорошо, конечно. То, что я хочу иметь, - это форма для отдельной дорожки, отображаемой с уже введенными данными, а также сообщения об ошибках Formtastic.
Что я делаю не так?