こんばんは
アロハな男、やすのりです!
今日は会員制のWebアプリ等でよく見かける『このメールアドレスは登録済みです。』みたいな表示をRails
とVue.js
を使って実装しちゃいましょう!
やり方さえわかれば、Vue.js
じゃなくてもAjax
を使えばできると思います!
※今回はRailsをAPIモードで使用しています。
※全てのコードを記述すると長くなるので、多少変更し必要最低限だけ記載します。
#結論
Railsのコードが、
namespace :api do
scope :v1 do
post '/auth/check_email', to: 'users#is_registerd?'
end
end
def is_registerd?
@user = User.is_exists?(params[:email])
render json: @user
end
こうで、Vue.jsのコードが、
isRegisterd({}, email) {
return axios.post('/api/v1/auth/check_email', {
email: email,
})
.then(response => {
if (response.data) {
this.errorMessage = 'すでに登録されているメールアドレスです';
};
});
}
と、なります!
それでは、順番に見ていきましょう!
Railsのコード
さて、それではまずはRails
のコードから見ていきましょう。
namespace :api do
scope :v1 do
get '/auth/check_email', to: 'users#is_registerd?'
end
end
最初にルーティングですが、Railsが最初からサポートしてくれるresources
では作成されない、メールアドレスが登録済みか確認するためだけの新しいアクションが必要になるため、直接HTTPメソッドや希望のパスやアクションを定義したいコントローラーを記述しちゃいましょう!
※api
やv1
はAPIモードでは通例のようなものになっているので今回は説明を省きます!
そうすると出来上がるのが以下のようなルーティングです。
さぁ、これでアクションへの道筋は出来上がりました。
では次に実際にメールアドレスを確認するアクションを定義しちゃいましょう。
def is_registerd?
@user = User.is_exists?(params[:email])
render json: @user
end
それがこちら!
ここではリクエストで送られてきたパラメーターの中から:email
を抜き出しUserモデル内にメールアドレスが存在しているかどうかを確認します。
その後、メールアドレスが既にUserモデル内にあればtrue
を、無ければfalse
を返します。
そして、その真偽値をjson形式でフロント側へレスポンスとして返して終了です!
Vue.jsのコード
それでは次はVue.js
のコードを見ていきましょう。
isRegisterd({}, email) {
return axios.post('/api/v1/auth/check_email', {
email: email,
})
.then(response => {
if (response.data) {
this.errorMessage = 'すでに登録されているメールアドレスです';
};
});
}
Vue.jsのコードもそこまで難しくありませんね。
isRegisterd関数
の第2引数にメールアドレスの情報を渡すことで関数内で使用することができます。
そして関数内でAjax
処理をしてくれるAxios
を使用し、第1引数に先ほどRailsで定義したアクションへのパス
を記述し、第2引数にemail
というパラメーター名にメールアドレスの情報を格納してリクエストを送るように記述します。
そして最後に、レスポンスとして返却された値がtrue
つまり、すでに登録されているメールアドレスならすでに登録されているメールアドレスです
という文をエラーメッセージに格納させます。
あとはそれをVue.js側で表示させてやれば、
冒頭のような表示を実装することができるようになります!
まとめ
いかがでしたか?
意外とコード自体は単純で簡単かと思います!
この記事についてのアドバイスや修正点等、コメントどしどし歓迎しています!!