我有一個Rails控制器設置,當用戶創建一個新記錄時,它將再次重定向到新動作並用新數據填充表單,並且這可以在循環中繼續,創建新記錄並重定向到新動作。我遇到的麻煩是將AJAX添加到此,以便用戶可以停留在此循環中而無需重新加載頁面。這裏是我的代碼,而AJAX:Ruby on Rails - 通過AJAX不斷循環新/創建動作
class ResponsesController
def new
@response = Response.new
@answer_a = Answer.find(rand(1..100))
@answer_b = Answer.find(rand(1..100))
@answer_c = Answer.find(rand(1..100))
end
def create
@response = current_user.responses.build(params[:response])
if @response.save
respond_to do |format|
format.html { redirect_to new_response_path }
format.js
end
else
render 'new'
end
end
end
new.html.erb
<div id="response_form">
<%= render 'form' %>
</div>
_form.html.erb
<%= form_for @response do |f| %>
<%= f.radio_button :user_answer, @answer_a.id %>
<%= @answer_a.description %>
<%= f.radio_button :user_answer, @answer_b.id %>
<%= @answer_b.description %>
<%= f.radio_button :user_answer, @answer_c.id %>
<%= @answer_c.description %>
<%= f.submit "Answer" %>
<% end %>
下面是我嘗試添加AJAX。但是,它正在進行演出並進行更新。我如何修復我的代碼,以便它可以保持重定向到新的動作,並且用戶可以繼續在無限循環上創建新記錄?
def create
@answer_a = Answer.find(rand(1..100))
@answer_b = Answer.find(rand(1..100))
@answer_c = Answer.find(rand(1..100))
@response = current_user.responses.build(params[:response])
if @response.save
respond_to do |format|
format.html { redirect_to new_response_path }
format.js
end
else
render 'new'
end
end
_form.html.erb
<%= form_for @response, :remote => true do |f| %>
<%= f.radio_button :user_answer, @answer_a.id %>
<%= @answer_a.description %>
<%= f.radio_button :user_answer, @answer_b.id %>
<%= @answer_b.description %>
<%= f.radio_button :user_answer, @answer_c.id %>
<%= @answer_c.description %>
<%= f.submit "Answer" %>
<% end %>
create.js.erb
$('#response_form').html('<%= j render("form") %>');
請注意,不要像那樣獲得隨機記錄。如果沒有找到記錄,則會返回零對象,並且會出現很多漂亮的錯誤,特別是當您嘗試使用@ answer_a.description調用它們時。看到這裏:http://stackoverflow.com/questions/5342270/rails-3-get-random-record –