См. Этот пост для демонстрации использования Ajax для вызова метода контроллера, поэтому вам не нужно перенаправлять на новый путь.
Rails 3 form_for ajax call
Надеюсь, это поможет вам.
РЕДАКТИРОВАТЬ 1: используйте form_tag
вместо.
<%= form_tag('/event_criteria_options/new', :remote => true, :format => :js) do %>
<%= hidden_field_tag :event_criteria_id, :value => event_criteria.id %>
<%= label_tag :value, "Event criteria option value"%>
<%= text_field_tag :value%>
<%= submit_tag "Add option value", :disable_with => 'Adding option value...'%>
<% end %>
обратите внимание, что в момент извлечения формы вы сможете получить EventCriteria.id
для правильного создания формы.
РЕДАКТИРОВАТЬ 2
Попробуйте изменить свое действие следующим образом:
def new
@event_criteria_id = params[:event_criteria_id]
@value = params[:value]
@event_criteria_option = EventCriteriaOption.create!(:event_criteria_id => @event_criteria_id, :value => @value)
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @event_criteria_option }
format.js { render } # Guess that is something missing here..
end
Проверьте этот URL и посмотрите, может ли он вам чем-нибудь помочь.
http://www.alfajango.com/blog/rails-3-remote-links-and-forms/
РЕДАКТИРОВАТЬ 3
Поскольку ваш объект создается, просто создайте новый файл с именем действия, в этом случае create.js.erb
в каталоге, связанном с views
, со следующим содержимым:
create.js.erb
$('body').html("<p>New Event Criteria Option created successful! </p>").append("<br /><b><%= escape_javaScript(@value) %></b>");
Приведенная выше строка вставит новый абзац внутри тела документа с этим содержимым. Но вы можете обрабатывать вывод так, как хотите. Это только javascript / jQuery.
Еще один момент, если вы имеете дело с Rails 3, рекомендуется начать использовать respond_with
Ваше новое create
действие должно выглядеть следующим образом:
def new
@event_criteria_id = params[:event_criteria_id]
@value = params[:value]
@event_criteria_option = EventCriteriaOption.create!(:event_criteria_id => @event_criteria_id, :value => @value)
respond_with(@value)
end
И в верхней части вашего контроллера поместите это:
class EventCriteriaController < ApplicationController
respond_to :html, :js
def create
.
.
end
end
РЕДАКТИРОВАТЬ 4
Используйте сеанс и создайте флаг для хранения, если установлен флажок или нет.
class EventCriteriaController < ApplicationController
respond_to :html, :js
def create
session[:checked] = true
.
.
end
end
А потом, на ваш взгляд, проверьте это session[:checked]
вид:
<% if session[:checked] %>
.
.
# code to make your checkbox with check value
<% else %>
# code to make your checkbox unchecked
.
<% end %>