Блок response_to в контроллере create в моем приложении Rails не перенаправляет на успешное сохранение ... Я уверен, что это простое решение, но я неопытен с Rails, и это первый время, когда я сталкиваюсь с этой проблемой.Rails reply_to redirect не работает
Форма устанавливается таким образом, что: дистанционное => верно, и контроллер выглядит следующим образом ...
def create
@store = current_user.stores.new(store_params)
respond_to do |format|
if @store.save
format.html { redirect_to root_path }
else
format.html { flash[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}"
render "new" }
format.js {}
end
end
end
И пока я на эту тему, код из еще часть условие тоже не выполняется, за исключением format.js {}
, который запускает код в моем файле create.js.erb (пока что предупреждение).
Я работаю с Rails 4.2.5. Может ли кто-нибудь помочь мне понять, почему перенаправление и предупреждение не работают? Спасибо!
РЕДАКТИРОВАНИЕ ПОКАЗАТЬ РЕШЕНИЕ На основании ответа Рича, вот решение, которое я придумал:
Контроллер:
def create
@store = current_user.stores.new(store_params)
flash.now[:alert] = "Save failed! #{@store.errors.full_messages.join(";")}" unless @store.save
respond_to do |format|
format.js
end
if @store.save
flash[:notice] = "New store created"
end
end
create.js.erb
<% if flash.now[:alert] %>
$("#alert_holder").empty();
$("#alert_holder").append("<%= j flash.now[:alert] %>");
<% else %>
window.location.href = "<%= root_url %>";
<% end %>
Обратите внимание, что мне нужно добавить котировки вокруг URL-адреса перенаправления.
В случае успеха формы страница перенаправляется на корень. При ошибке сообщение об ошибке мигает, но форма не обновляется - все ответы, которые пользователь ввел, остаются.
Wow! Спасибо, это замечательное объяснение! – skwidbreth
Это действительно здорово, я бы не подумал об этом сам. Благодарим за предоставление руководства для новичков Rails. – skwidbreth
Я отредактировал свой вопрос, чтобы отобразить ответ, который я придумал, основываясь на вашем руководстве. Я должен был подстроить несколько вещей, но он отлично работает. – skwidbreth