При успехе форма отправляет удаленно и правильно загружает 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)
Попробуйте начать спасательный блок
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
Если у вас есть вызовы в вашем представлении, ссылающиеся на @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.
@event
не используется в index.js.erb
? Помните, что ваше оповещение будет срабатывать только на стороне клиента, и ваш сервер до этого будет давать ошибки.