Я использую шаблон отвратительный в своем коде, и я знаю, что должен быть лучший способ сделать это. Помоги мне переосмыслить то, что я делаю.
Мой сайт является своего рода дискуссионным форумом. Все ответы на обсуждения сделаны на контроллере Discussions # show page inline.
Некоторые ответы недействительны, однако - например, если вы попытаетесь опубликовать ответ, в котором нет текста, он вернет вас в DiscussionsController # show с сообщением об ошибке.
Вот краткое описание того, как я реализовал этот рабочий процесс:
- Пользователь заходит в дискуссионный контроллер # show. Этот шаблон имеет форму ответа. Не существует явного RepliesController # new action.
- Пользователь отправляет форму ответа, которая отправляется в replies_path и обрабатывается в RepliesController # create.
- RepliesController # create не может сохранить ответ, потому что он недействителен (validates_length_of в поле Reply делает объект недействительным).
- RepliesController # create помещает объект ответа в сессию [: new_reply] и перенаправляет на путь обсуждения_, откуда пришел пользователь.
- DiscussionsController # show обрабатывает объект сеанса ...
Вот так:
if session[:new_reply]
@new_reply = session[:new_reply]
session.delete(:new_reply)
end
А теперь в show.html.erb есть недавно регенерированный объект @new_reply для проверки на ошибки.
Что-то явно не так с этим - вы не должны хранить целые объекты внутри сеанса. Но поскольку объект Reply, который мы пытались сохранить в RepliesController # create, никогда не сохраняется, как мне сохранить его между вызовами действий контроллера?
Или, если есть более масштабное дизайнерское решение, не стесняйтесь им поделиться. Это так уродливо, это причиняет мне боль. Спасибо.