ユーザーが新しいレコードを作成すると、新しいアクションに再びリダイレクトされ、フォームに新しいデータが入力されるようにRailsコントローラーを設定しました。これは、ループで続行し、新しいレコードを作成して、新しいアクション。私が問題を抱えているのは、これにAJAXを追加して、ユーザーがページをリロードせずにこのループにとどまることができるようにすることです。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を追加しようとする私の試みです。ただし、show アクションに移動して更新を行っています。新しいアクションにリダイレクトし続け、ユーザーが無限ループで新しいレコードを作成し続けることができるように、コードを修正するにはどうすればよいですか?
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") %>');