2014-01-10 3 views
0

В случае успеха, форма представляет удаленно и правильно загружает index.js.erb (Life хорошо)Не redirect_to страницу на ошибки

Однако на ошибку (еще) ничего не происходит. То, что я хочу сделать, при ошибке загружает другой файл или добавляет логику в 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) 

ответ

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 http: // localhost: 3000/events? Utf8 =% E2% 9C% 93 & checkin = dawdw12 & commit = Checkin 406 (недопустимо) – RedRory

+0

@RedRory вы знакомы с отладчиком? можете ли вы остановить поток в спасательном блоке и проверить? – arun15thmay

+0

Я установил отладчик и поместил его на Строку 2, однако, когда я пытаюсь перейти к следующему. Он несет меня в active_record/relation.rb и другой метод высокого уровня, и я буквально «следующий» двадцать раз и никогда не прихожу к моему указательному действию. – RedRory

0

Если у вас есть звонки в твоем соперничестве w, которые ссылаются на @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, то сделайте что-нибудь, и наоборот.

<%= 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? :speaker_code, и в случае неудачи, выполнить еще ветвь.

+0

Это пришло в голову; Я временно изменил свой index.js.erb to alert («Тест»); Таким образом, не происходит загрузка <% @event %> – RedRory

+0

О, так что '@ event' нигде не используется в' index.js.erb'? Помните, что ваше предупреждение будет запущено только на стороне клиента, а ваш сервер будет ошибкой до этого. –

+0

В целях отладки я удалил все из index.js.erb и теперь только вызываю предупреждение. (Просто пытаюсь заставить его вызвать файл при ошибке). Не повезло. Может ли быть после моего ELSE (строка 10), я пытаюсь перенаправить на «@event» [, который мы знаем, существует], или он пропускает format.html и переходит прямо в format.js – RedRory

Смежные вопросы