Как сохранить заполненные значения, если страница перезагружается в ruby

После проверки я отображаю ошибку и возвращаюсь обратно на :same страницу. Некоторые поля в форме уже заполнены, поэтому я хочу оставить их заполненными при отображении сообщений об ошибках. Вот мой код контроллера:

def signup
   @user=User.new(params[:user])
   if @user.save
     render "thanks", layout: "thanks"
   else
     flash[:notice] = "Unable to create an user, user name already exists. Try again!"
     render "signup", layout: "signup"
  end
end

Мой код просмотра выглядит следующим образом:

<%= form_for "user_signup" do |f|%>
  <%= f.text_field :username %>
<% end %>

Как это сделать?


person Pez    schedule 29.08.2013    source источник


Ответы (2)


Ваш дизайн неправильный. Должно быть как минимум два действия, одно для отображения формы, другое для создания объекта.

Как это

def signup
  @user = User.new
end

def create
  @user=User.new(params[:user])
  if @user.save
    render "thanks", layout: "thanks"
  else
    flash[:notice] = "Unable to create an user, user name already exists."
    render "signup", layout: "signup"
  end
end

В случае неудачи create будет отображен шаблон регистрации, экземпляр @user в шаблоне будет заменен неудачным экземпляром с неправильным заполнением, и вы увидите, что все заполнения сохранены.

person Billy Chan    schedule 29.08.2013

Вам нужно будет где-то хранить значения в контроллере (например, в хэше), и когда представление отображается, заполните значения этого хэша, если они есть. Вы бы сделали что-то подобное, если бы хотели иметь значения по умолчанию для некоторых полей.

person Ivaylo Strandjev    schedule 29.08.2013