Я не знаю, сработает ли это, но я думаю, что должно быть что-то вроде этого, чтобы сэкономить на каждом "шаговом изменении":
def update
session[:demographic_params].deep_merge!(params[:demographic]) if params[:demographic]
@demographic = Demographic.find(params[:id])
@demographic.current_step = session[:demographic_step]
@demographic.update_attributes(params[:demographic])
if params[:back_button]
@demographic.previous_step
elsif @demographic.last_step?
updated = true
else
@demographic.next_step
end
session[:demographic_step] = @demographic.current_step
if not updated
render "edit"
else
session[:demographic_params] = session[:demographic_step] = nil
flash[:notice] = "Entry entered successfully"
redirect_to demographic_path
end
end
Т.е. переместите @demographic.update_attributes
вне "Пошаговая "логика".
Итак, я думаю, что вы должны пойти по этому пути, чтобы решить свою проблему.
Надеюсь, это поможет.