0

検証後、エラーを表示してページに戻り: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 %>

これを行う方法?

4

2 に答える 2

0

コントローラーのどこかに値を保存する必要があります (たとえば、ハッシュ)。ビューがレンダリングされるときに、存在する場合はそのハッシュの値を入力します。一部のフィールドにデフォルト値が必要な場合は、同様のことを行います。

于 2013-08-29T07:22:42.247 に答える
0

あなたのデザインは間違っています。少なくとも 2 つのアクションが必要です。1 つはフォームを表示するアクション、もう 1 つはオブジェクトを作成するアクションです。

このような

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、テンプレート内のインスタンスが、間違った入力を含む失敗したインスタンスに置き換えられ、すべての入力が保持されていることがわかります。

于 2013-08-29T07:46:41.427 に答える