このレールキャストを使用して作成したマルチステップ フォーム (ウィザード) があります: http://railscasts.com/episodes/217-multistep-forms。
フォームに入力されたすべての情報を記憶するためにセッションが使用されています。1 つのフォーム ページに、3 つのオプションを持つ選択ボックスがあり、各オプションはページに異なるフォーム フィールドを表示します。オプションは次のとおりです。「小売およびオフィス」(小売とオフィスの両方のフィールドが表示されます)、「オフィスのみ」(オフィスのフィールドのみが表示されます)、「小売のみ」(小売のフィールドのみが表示されます)。
選択ボックスで選択したオプションに基づいて、jquery を使用してこれらのフィールドを表示および非表示にしました。だからここに私が抱えている問題があります。たとえば、選択ボックスから「小売のみ」を選択したとします。オフィス分野が消え、小売分野のみが表示されます。フィールドに情報を入力し、次のステップに進みます。ただし、戻るボタンを押してこのステップに戻って編集すると、オフィス フィールドと小売フィールドの両方が表示されます。選択ボックスの [小売店のみ] の選択は同じままで、入力した情報もそのままですが、両方のフィールドが表示されています。
問題はjqueryにあり、Railsセッションにはないと思います。これはクッキーと関係がありますか? これを修正するにはどうすればよいですか?
アプリケーション.js
$(document).ready(function() {
$("#spaces").change(function(){
if ($("#spaces").val()=="Retail only") {$("#office_field").hide(); $("#retail_field").show(); }
if ($("#spaces").val()=="Office only") {$("#office_field").show(); $("#retail_field").hide(); }
if ($("#spaces").val()=="Retail and Office") {$("#office_field").show(); $("#retail_field").show(); }
});
uploads_controller.rb
class UploadsController < ApplicationController
def index
@uploads = Upload.all
end
def show
@upload = Upload.find(params[:id])
end
def new
session[:upload_params] ||= {}
@upload = Upload.new(session[:upload_params])
@upload.current_step = session[:upload_step]
end
def create
session[:upload_params].deep_merge!(params[:upload]) if params[:upload]
@upload = Upload.new(session[:upload_params])
@upload.current_step = session[:upload_step]
if @upload.valid?
if params[:back_button]
@upload.previous_step
elsif @upload.last_step?
@upload.save if @upload.all_valid?
else
@upload.next_step
end
session[:upload_step] = @upload.current_step
end
if @upload.new_record?
render "new"
else
session[:upload_step] = session[:upload_params] = nil
flash[:notice] = "Upload saved"
redirect_to @upload
end
end
end