(もともとこの投稿の一部だった 2 番目の質問を別の投稿に分割しました)
Rails を使用して製品のランディング ページを作成しています。このページでは、ユーザーが電子メール アドレスを入力して、製品の発売時に通知を受け取ることができます。(はい、私のためにこれを行うことができるサービス/宝石などがありますが、私はプログラミングが初めてで、Rails を学ぶために自分で構築したいと考えています。)
フォームの送信時にエラーが発生した場合、アプリは現在「/invites」にリダイレクトします。代わりに、元のフォームと同じページ/URL にエラー メッセージを表示したいですか? (私の場合、エラーメッセージが「/invites」に表示されている間、フォームはルートにあります)
ルートに関するRailsガイドと、フォームエラーの処理に関する多数のstackoverflowの投稿を読みましたが、私が持っている質問に答えているようには見えません。
更新: @rovermicroverからの返信に基づいて明確にしたいと思います。私は Ajax ソリューションを受け入れていますが、エラー メッセージを表示するページの更新で問題ありません。(@rovermicrover による推奨事項を希望どおりに機能させることができませんでした。詳細については、以下のその解決策に対する私の回答を参照してください。)
私がしたこと:
招待モデル:
class Invite < ActiveRecord::Base
attr_accessible :email
validates :email, :presence => {:message => "Please enter an email address."}
end
私のルートファイル:
SuggestionBoxApp::Application.routes.draw do
root to: 'invites#new'
resources :invites
end
これは私が Invites コントローラーに持っているものです (参照しているアクションのみを含めました: new、create、show - 基本的には Rails が生成する可能性のあるもののデフォルトです):
class InvitesController < ApplicationController
def show
@invite = Invite.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @invite }
end
end
def new
@invite = Invite.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @invite }
end
end
def create
@invite = Invite.new(params[:invite])
respond_to do |format|
if @invite.save
format.html { redirect_to @invite }
format.json { render json: @invite, status: :created, location: @invite }
else
format.html { render action: "new" }
format.json { render json: @invite.errors, status: :unprocessable_entity }
end
end
end
end
この質問への回答に役立つ追加情報があればお知らせください。ありがとう!