私は Rails を初めて使用し、別のチームによって作成されたアプリを変更しようとしています。検証に失敗した後、フォーム フィールドを保持する必要があるという一般的な問題があります。このアプリでは、ユーザーは名前、電子メール、招待コードなどの基本情報を送信します。コントローラーで招待コードを検証します。失敗した場合、現在はredirect_to :back
実行されますが、ユーザーが入力した情報が失われ、フォームがクリアされます。私が調査した他のページから、適切なことはrender :action => :new
. ただし、それを試みるとエラーが発生します。
この試み…
format.html { render :action => "new" }
すべて同じ結果になります...
テンプレートがありません
テンプレート after_step/new、application/new がありません...
以前の開発者が設定した方法では、フォームのステップ 1 は「users/registrations/new」にありますが、次のステップは「after_step/step_two」にあるなどです。したがって、フォームを送信すると、「after_step_controller」になります。 .rb" で検証を行っています。明らかに、「registrations_controller.rb」ではなく、そのコントローラーで「新しい」アクションをレンダリングしようとしていることがわかります。
しかし、私がそれを強制しようとすると...
format.html { render :template => "registrations_controller/new" }
format.html { render :action => "new", :controller => "registrations" }
...まだテンプレートが見つからないというエラーが表示されます。したがって、オンラインで提案されている他のことを試しました...
format.html { render :template => "users/registrations/new" }
format.html { render :file => "users/registrations/new.html.erb" }
次のエラーが発生したため、これらも機能しませんでした。
NilClass:Class の未定義メソッド `model_name'
その後、これを調査したところ、「新しい」関数は新しいユーザーを作成していないという意見がほとんどでした。ただし、コードはそこにあるため、何が起こっているのかわかりません。
誰でもこれで正しい方向に向けることができますか? 明らかにショーストッパーではありませんが、ユーザーエクスペリエンスを向上させるために、検証に失敗したときにフォームフィールドの値を保持したいと思います。
ここにいくつかの情報があります...
ユーザー/登録/new.html.erb
<%= form_for(@user, :url => step_two_path) do |f| %>
<div class="signup_step_mid_content">
<div class="step_content_block">
<h3> First, tell us a little bit about yourself:</h3>
<div class="signup_filed_small mrgn_r_20">
<label>First Name</label>
<%= f.text_field :first_name, :title => "First Name", :placeholder => "First Name" %>
</div>
registrations_controller.rb
def new
@user = User.new
@invite_code = params[:invite_code]
end
after_step_controller.rb
def step_two
@user = User.find_by_email(params[:user][:email])
respond_to do |format|
@tester = Prefinery::Tester.new(:beta_id => 1234)
@tester.email = params[:user][:email]
@tester.invitation_code = params[:user][:invitation_code]
@tester.status = 'active'
if !@tester.save
#format.html{redirect_to :back }
#format.html { render :template => "registrations_controller/new" }
#format.html { render :action => "new", :controller => "registrations" }
#format.html { render :action => "new" }
#format.html { render :template => "users/registrations/new" }
#format.html { render :file => "users/registrations/new.html.erb" }
さらに情報が必要な場合はお知らせください。