Deviseの探索、パート2
はじめに
チュートリアルの最初の部分では、DeviseをインストールしてRailsアプリケーションでセットアップする方法を学びました。このパートでは、DeviseInvitableを統合する方法を見ていきます。
DeviseInvitableは、Deviseで動作する拡張機能です。アプリケーションにDeviseInvitableを使用すると、ユーザーは電子メールで友達を招待できます。これは、コラボレーションアプリを構築している場合に、アプリケーションに含めることができる優れた機能です。
DeviseInvitableの設定
Gemfile
を開きます 宝石を追加します:
#Gemfile ... gem'devise_invitable'
コマンドを実行して、bundle install
をインストールします 。
generatorコマンドを実行して、DeviseInvitableの構成オプションをDevise構成ファイルに追加します。
rails generate devise_invitable:install
config/initializers/devise.rb
をチェックすると、新しい変更を確認できます。 テキストエディタで。
次に、DeviseInvitableをUser
に追加しましょう モデル。
railsはdevise_invitableユーザーを生成します
これにより、:invitable
が追加されます モデルにフラグを立てると、ユーザーモデルは次のようになります。
#app / models / user.rbclass User上記のコマンドを実行すると、以下のような移行ファイルも生成されました。 class DeviseInvitableAddToUsers次に、
rake db:migrate
を実行してデータベースを移行します。 。DeviseInvitable用のコントローラーの構成
招待状を送信するときにいくつかのパラメーターを渡すには、DeviseInvitableが必要です。これを機能させるには、使用する必要なパラメータをホワイトリストに登録する必要があります。テキストエディタを使用して、
app/controllers/application_controller.rb
に移動します そして、あなたを私が以下に持っているもののように見せてください:#app / controllers / application_controller.rbclass ApplicationController上記から、
それでは、コンソールを介して何があるかを見てみましょう。ターミナルで、
rails console
を実行します 下にあるものを入力してください。[1] pry(main)> User.invite!(:email => "[email protected]")違いはありますが、以下のような出力が生成されるはずです。
[2] pry(main)>ユーザー負荷(78.3ms)SELECT"users"。*FROM "users"WHERE"users"。"email"=? ORDERBY"users"。"id"ASC LIMIT 1 [["email"、 "[email protected]"]]ユーザー負荷(0.2ms)SELECT"users"。*FROM "users"WHERE"users"。"invitation_token "=? ORDERBY"users"。"id"ASC LIMIT 1 [["invitation_token"、 "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92"]](0.1ms)トランザクションSQLを開始(67.8ms)INSERT INTO "users"( "email"、 "、" invitation_created_at "、" invitation_sent_at "、" created_at "、" updated_at ")VALUES(?、?、?、?、?、?、?)[[" email "、" [email protected] "]、[ "encrypted_password", "$2a$11$0sLfqvfFDsebcmcQTUXzlOuqNIooL5z8niXeza8OUwNK3gZY/iRum"], ["invitation_token", "658da470d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92"], ["invitation_created_at", "2016-10-07 07:41:51.254047"], ["invitation_sent_at", " 2016-10-07 07:41:51.254047 "]、[" created_at "、" 2016-10-07 07:41:51.255700 "]、[" updated_at "、" 2016-10-07 07:41:51.255700 "] ](220.5ms)コミットトランザクションレンダリングされた/home/kinsomicrote/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/devise_invitable-1.7.0/app/views/devise/mailer/invitation_instructions。 html.erb(2.5ms)レンダリングされた/home/kinsomicrote/.rbenv/versi ons / 2.3.0 / lib / ruby / gems / 2.3.0 / gems / devise_invitable-1.7.0 / app / views / devise / mailer / invitation_instructions.text.erb(88.0ms)Devise ::Mailer#invitation_instructions:アウトバウンドで処理247.1msでメールを送信[email protected]にメールを送信(74.3ms)日付:2016年10月7日金曜日08:41:51 +0100差出人:[email protected]返信先: [email protected]:[email protected]:<[email protected]> Subject:Invitation InstructionsMime-Version:1.0Content-Type:multipart / Alternative; border ="-==_ mimepart_57f751bfcc725_18022ac6c272b12840524"; charset =UTF-8Content-Transfer-Encoding:7bit ---- ==_ mimepart_57f751bfcc725_18022ac6c272b12840524Content-Type:text / plain; charset =UTF-8Content-Transfer-Encoding:7bitHello [email protected]誰かがあなたをhttps:// localhost:3000 /に招待しました、あなたは以下のリンクを通してそれを受け入れることができます。http:// localhost:3000 / users / invitation / accept?invitation_token =xmW9uRfyafptmeFMmFBy招待を受け入れたくない場合は、このメールを無視してください。上記のリンクにアクセスしてパスワードを設定するまで、アカウントは作成されません。----==_ mimepart_57f751bfcc725_18022ac6c272b12840524Content-Type:text / html; charset =UTF-8Content-Transfer-Encoding:7bitHello [email protected]
誰かがあなたをhttp:// localhost:3000 /に招待しました、あなたは以下のリンクを通してそれを受け入れることができます。
招待を受け入れる 必要がない場合招待を受け入れるには、このメールを無視してください。
---- ==_ mimepart_57f751bfcc725_18022ac6c272b12840524-=>#<ユーザー:0x00558d875fa798 id:4、email: "[email protected]"、encrypted_password: "$ 2a $ 11 $ 0sLfqvfFDsebcmcQTUXzlOuqNIooL5z8niXeza8OUwNK3gZY / iRum:n_it_token:nil、reset_password_sent_at nil、current_sign_in_ip:nil、last_sign_in_ip:nil、created_at:2016年10月7日金曜日07:41:51 UTC + 00:00、updated_at:2016年10月7日金曜日07:41:51 UTC +00:00、ユーザー名:nil、招待トークン: "658da470 d5fcbb2275f30bc1fb66f5771b889cec2f1e56f536319d2fd1ef4a92 "、invitation_created_at:2016年10月7日金曜日07:41:51 UTC +00:00、invitation_sent_at:2016年10月7日金曜日07:41:51 UTC +00:00、invitation_accepted_at:nil、invitation_limit:nil 、invited_by_type:nil、invitations_count:0> [3] pry(main)>
上記のリンクにアクセスしてパスワードを設定するまで、アカウントは作成されません。計画どおりに機能しました。
ユーザーがコマンドラインから招待状を送信することは望ましくないため、フロントエンドで動作するようにDeviseInvitableを設定することが重要です。これを行うのは非常に簡単です。 generatorコマンドを実行して、DeviseInvitableのビューを生成します。
rails generate devise_invitable:views users
また、招待状を送信するためのページ(
app/views/users/invitations/new.html.erb
)を指すリンクをアプリケーションのどこかに追加する必要があります。 。このアプリケーションでは、先に進んでナビゲーションファイルへのリンクを追加できます。これが私のやり方です:
#app / views / shared / _navigation.html.erbDeviseInvitableによって利用可能になったルートを確認するには、コマンド
rake routes | invit
。出力は次のようになります。cancel_user_registration GET / users / cancel(.:format)devise_invitable / registerrations#cancel user_registration POST / users(.:format)devise_invitable / registerrations#create new_user_registration GET / users / sign_up(.:format)devise_invitable / reg GET / users / edit(。:format)devise_invitable / registrations#edit PATCH / users(.:format)devise_invitable / registerrations#update PUT / users(.:format)devise_invitable / registerrations#update DELETE / users(.:format)devise_invitable / registerrations#destroy accept_user_invitation GET / users / invitation / accept(.:format)devise / invitations#edit remove_user_invitation GET / users / invitation / remove(.:format)devise / invitations#destroy user_invitation POST / users / invitation(.:format) )devise / invitations#cr eate new_user_invitation GET / users / invitation / new(。:format)devise / invitations#new PATCH / users / invitation(.:format)devise / invitations#update PUT / users / invitation(。:format)devise / invitations#update現時点で私たちが持っているものを見てみましょう。コマンドを実行してサーバーを起動します。
rails server
。ブラウザで
https://localhost:3000/users/invitation/new
を指定します 。表示されたフォームにメールアドレスを入力し、ボタンをクリックします。それはうまくいくはずです!サーバーのログにアクセスすると、招待状を送信したときに作成された出力が表示されます。出力には、招待を受け入れるためのリンクが表示されます。あなたは私に同意するでしょう、あなたがあなたのブラウザで送られた電子メールを見ることができればそれはより良いでしょう。それを機能させる方法を見てみましょう。
Letter_Openerの統合
レターオープナーを使用すると、デフォルトのブラウザでメールをプレビューできます。これにより、開発環境での作業中にメール配信システムをセットアップする必要がなくなります。
Gemfileを開き、以下にgemを追加します。
gem 'letter_opener'
bundle install
を実行します 。テキストエディタを使用して、
config/environments/development.rb
に移動します 下の行を追加します。#config / environment / development.rb ... config.action_mailer.delivery_method =:letter_openerendRailsサーバーを再起動します。次に、ブラウザで
https://localhost:3000/users/invitation/new
を指定します。 。表示されたフォームに記入して送信します。今回は、招待メールを含む新しいページがポップアップ表示されます。デフォルトのサインインルートとサインアウトルートを変更する
デフォルトでは、
sign_in
およびsign_out
Deviseを使用する場合のルートは次のようになります:
sign_in:
https://localhost:3000/users/sign_in
sign_out:
https://localhost:3000/users/sign_out
変更するには、
config/routes.rb
に移動します そして、以下を追加します:#config / routings.rb as:user do get'signin' =>'devise / sessions#new' post'signin' =>'devise / sessions#create' delete'signout' =>'devise / sessions#破壊するブラウザで
https://localhost:3000/signin
を指定できます 。結論
これで、DeviseInvitableを使用する方法がわかりました。また、gem
letter_opener
についても学びました。 。 Deviseでできることはたくさんあるので、詳細についてはWikiをチェックしてください。私と一緒にいてくれてありがとう。
-
Ruby内部:Rubyオブジェクトのメモリレイアウトの調査
Ruby内部のクイックツアーをご希望ですか? その後、あなたは御馳走になります。 なぜなら … Rubyオブジェクトがメモリ内にどのように配置されるか、そして内部データ構造を操作していくつかのクールなことを行う方法を一緒に探求します。 シートベルトを締めて、Rubyインタープリターの奥深くへの旅の準備をしてください! アレイのメモリレイアウト 配列を作成するとき、Rubyはそれをシステムメモリと少しのメタデータでバックアップする必要があります。 メタデータに含まれるもの : 配列サイズ(アイテム数) アレイ容量 クラス オブジェクトのステータス(凍結されているかどうか) データが
-
MRIソースコードの調査
しばらくRubyを使用している場合は、内部でいくつかのものがどのように機能するかについて興味があるかもしれません。 Rubyの内部を深く掘り下げる1つの方法は、Rubyを機能させるソースコードを読み取ることです。 Cを知らなくても、面白いものをいくつか拾うことができます。 ソースコードは、Rubyのgithubリポジトリにあります。 理想的には、クラス名とメソッド名を簡単に見つけることができるCodequeryのようなツールを使用する必要があります。 コアクラスの調査 ほとんどの探索はルートフォルダで行われます。ここに、Objectなどのすべてのコアクラスのソースコードがあります。 o