Rails を使用して基本的な製品ランディング ページを作成しています。このページでは、ユーザーが電子メール アドレスを入力して、製品の発売時に通知を受けることができます。(はい、私のためにこれを行うことができるサービス/宝石などがありますが、私はプログラミングが初めてで、Rails を学ぶために自分で構築したいと考えています。)
フォームが正常に送信されたら、カスタムの「/thanks」ページにリダイレクトして、ユーザーが製品に関心を持ってくれたことに感謝したいと思います (また、簡単なアンケートに回答するように促します)。
現在、成功した送信は「/invites/:id/」、たとえば「invites/3」に表示されます。これは、送信された招待の数を公開するため、望ましくありません。代わりに、成功したすべての送信を「/thanks」ページにリダイレクトしたいと思います。
「rails カスタム URL」を調査しようとしましたが、機能するものを見つけることができませんでした。私が見つけることができた最も近いものは、カスタム ルートでリダイレクトする方法に関するこの Stackoverflow の投稿でしたが、推奨されるソリューションを完全には理解していませんでした。Rails Guide on Routesも読んでみましたが、これは初めてで、カスタム URL の作成を許可するものは何もありませんでした。
「views/invites/show.html.haml」に、フォームの送信が成功したときに表示される感謝のメッセージを配置しました。
私のルートファイル
resources :invites
root :to => 'invites#new'
routes.rb に挿入してみました:
post "/:thanks" => "invites#show", :as => :thanks
しかし、これが機能するかどうか、またはコントローラーにリダイレクトするように指示する方法がわかりません:thanks
私のコントローラー(基本的にバニラレール、ここに含まれる関連するアクションのみ):
def show
@invite = Invite.find(params[:id])
show_path = "/thanks"
respond_to do |format|
format.html # show.html.erb
format.json { render json: @invite }
end
end
# GET /invites/new
# GET /invites/new.json
def new
@invite = Invite.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @invite }
end
end
# POST /invites
# POST /invites.json
def create
@invite = Invite.new(params[:invite])
respond_to do |format|
if @invite.save
format.html { redirect_to @invite }
#format.js { render :action => 'create_success' }
format.json { render json: @invite, status: :created, location: @invite }
else
format.html { render action: "new" }
#format.js { render :action => 'create_fail' }
format.json { render json: @invite.errors, status: :unprocessable_entity }
end
end
end
確認を表示するための標準 URL を作成するのは、比較的簡単に思えます。これを達成する方法についてのアドバイスをいただければ幸いです。