Не перенаправляет на страницу при ошибке

0

При успехе форма отправляет удаленно и правильно загружает index.js.erb(Life - это хорошо)

Однако при ошибке (else) ничего не происходит. То, что я хочу сделать, при ошибке загружает другой файл или добавляет логику в index.js.erb. Однако он просто терпит неудачу и не загружается.

Ошибка Не удалось загрузить ресурс: сервер ответил с состоянием 500 (Внутренняя ошибка сервера). Я знаю, что получил ошибку 406 после реализации спасения

(Я понимаю, что это потому, что он не находит событие, но как я могу обеспечить его загрузку моего index.js. erb-, чтобы я мог, в свою очередь, отображать модальный, уведомляющий пользователя)

Контроллер событий

def index
  respond_to do |format|
    if @event = Event.find_by_event_code(params[:checkin])
      format.html { redirect_to @event, success: "You have found your event" }
      format.js
    elsif @event = Event.find_by_speaker_code(params[:checkin])
      format.html { redirect_to @event, success: "Welcome Super User. You have found your event" }
      format.js
    else
      format.html { redirect_to @event, error: "No event by that event code" }
      format.js
    end
  end
end

index.js.erb

$("#checkin-popup").remove();
$("#checkin-confirm-popup").html("<%= escape_javascript(render("/events/index.html.erb")) %>")
$('#checkin-confirm-popup').modal('show');

button.html

<%= simple_form_for @event, remote: true ,:method => 'get' do |e| %>
    <div class="talknumber"><%= text_field_tag :checkin, params[:search] %></div>
  <%= e.button :submit, "Checkin", :class => "btn btn-default" %>
<% end %>

журнал сервера

Started GET "/events?utf8=%E2%9C%93&checkin=1212122&commit=Checkin" for 127.0.0.1 at 2014-01-10 11:43:39 -0500
Processing by EventsController#index as JS
  Parameters: {"utf8"=>"✓", "checkin"=>"1212122", "commit"=>"Checkin"}
   (0.5ms)  SELECT "users"."name" FROM "users"
  Event Load (0.5ms)  SELECT "events".* FROM "events" WHERE "events"."event_code" = 1212122 ORDER BY events.created_at ASC LIMIT 1
  Event Load (0.4ms)  SELECT "events".* FROM "events" WHERE "events"."speaker_code" = 1212122 ORDER BY events.created_at ASC LIMIT 1
Completed 406 Not Acceptable in 7ms (ActiveRecord: 1.4ms)
Теги:
redirect

2 ответа

0

Попробуйте начать спасательный блок

  def index
    respond_to do |format|
      begin
        if @event = Event.find_by_event_code(params[:checkin])
          format.html { redirect_to @event, success: "You have found your event" }
          format.js
        elsif @event = Event.find_by_speaker_code(params[:checkin])
          format.html { redirect_to @event, success: "Welcome Super User. You have found your event" }
          format.js
        end
      rescue
        format.html { redirect_to @event, error: "No event by that event code" }
        format.js
      end
    end
  end
  • 0
    Эй, я только что попробовал начать блок восстановления ... Теперь я получаю ошибку 406 - GET localhost: 3000 /… 406 (неприемлемо)
  • 0
    @RedRory ты знаком с отладчиком? Вы можете остановить поток в спасательном блоке и проверить?
Показать ещё 1 комментарий
0

Если у вас есть вызовы в вашем представлении, ссылающиеся на @event тогда вам нужно иметь дело с ними. Если на странице у вас есть (скажем) форма, представляющая значения, то просто убедитесь, что представление поставляется с @event = Event.new должно быть достаточно. Однако, возможно, это не так, поэтому вы хотите спастись на этапе просмотра, предоставив альтернативное значение, которое имеет смысл в контексте страницы, если @event не определено. Что-то вроде:

<%= @event ? @event : 'No event' %>

а не просто

<%= @event %>

EDIT: новый код контроллера

def index
 respond_to do |format|
    if @event = Event.find_by_event_code(params[:checkin])
      format.html { redirect_to @event, success: "You have found your event" }
      format.js
    else 
      if @event = Event.find_by_speaker_code(params[:checkin])
        format.html { redirect_to @event, success: "Welcome Super User. You have found your event" }
        format.js
      else
        format.html { redirect_to @event, error: "No event by that event code" }
        format.js
      end
    end
  end
end

Я действительно не думаю, что это отличный способ сделать что-то. Форма должна быть разделена, чтобы вы могли получить отдельные параметры, на которые вы можете запросить, указав, что если (скажем) params.has_key? :foo params.has_key? :foo тогда что-то делать, и наоборот.

<%= simple_form_for @event, remote: true ,:method => 'get' do |e| %>
  <div class="talknumber">
    <%= text_field_tag :event_code, params[:search] %>
    <%= text_field_tag :speaker_code, 'value here - I don't know what params[:search is] %>
  </div>
  <%= e.button :submit, "Checkin", :class => "btn btn-default" %>
<% end %> 

Таким образом, вы можете сказать, что если params.has_key? :event_code params.has_key? :event_code является ложным, а затем ищет params.has_key? :speaker_code params.has_key? :speaker_code, и в противном случае выполните ветку else.

  • 0
    Это пришло в голову; Я временно изменил свой index.js.erb для оповещения («Тест»); Таким образом, загрузка <% @event%> не происходит
  • 0
    О, так @event не используется в index.js.erb ? Помните, что ваше оповещение будет срабатывать только на стороне клиента, и ваш сервер до этого будет давать ошибки.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню