Rails RESTful контроллер и рендеринг после пользовательских действий
-
19-08-2019 - |
Вопрос
Как я могу выполнить рендеринг после выполнения действия в успокоительном контроллере вместо перенаправления.
У меня есть контроллер со стандартными действиями, и я добавил специальное действие, которое добавляет данные к рассматриваемому ресурсу через форму на странице #show (подумайте о комментариях к сообщению). Я проверяю входные данные из формы и хочу повторно отобразить действие show в случае ошибки и перенаправить действие show в случае успеха.
Я хочу выполнить рендеринг, чтобы пользователь дважды не вводил свои данные, но при попытке рендеринга действия show с ошибкой во флеш-памяти [: note] я получаю сообщение о том, что я не указываю идентификатор. Когда я указываю идентификатор, он пытается отобразить новый шаблон, который еще не существует.
Я думаю, что это должно быть так же просто, как:
def add_comment
if my_validation?
save the object
redirect_to :action => "show", :id => params[:id]
else
render :action => "show", :id => params[:id]
end
end
Это не мой настоящий код, просто то, что я сейчас собрал в качестве примера.
Решение
Лучший способ - перерисовать: new
def create
@obj = TheObject.new(params[:object])
render :action => :new unless @obj.save
end
И в new.html.erb
<% form_for :obj,
:url => object_url(@obj), :html => {:method => :post} do |f| %>
<%= f.text_field :name %>
<% end %>
Таким образом, входные данные в форме будут предварительно заполнены данными, введенными пользователем.
Другие советы
Создайте новый объект данных и добавьте значения из формы, прежде чем выполнять повторное рендеринг, подумайте, что тогда он будет работать. Если проблемы по-прежнему возникают, попробуйте установить логическое значение для редактирования новых и существующих строк или полностью создать два разных представления.
Я делал это раньше, но я не совсем помню как. Иногда, когда я использовал очень типичное использование шаблона MVC, все это было & Quot; automagical & Quot; в других случаях (поскольку мне приходилось использовать старую причудливую базу данных), мне приходилось кодировать всю магию самостоятельно; иногда используя функцию .new?
(или как она была вызвана) объекта ActiveRecord, иногда я использовал временные " магические значения " для идентификатора (обычно буквенные строки для недопустимых значений идентификатора.
(я извиняюсь, если допустил некоторые ошибки, прошло некоторое время с тех пор, как я написал код Rails ...)