Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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  

上記から、:email であることがわかります。 DeviseInvitableのホワイトリストに登録されました。

それでは、コンソールを介して何があるかを見てみましょう。ターミナルで、rails consoleを実行します 下にあるものを入力してください。

 [1] pry(main)> User.invite!(:email => "johndoe@example.com")

違いはありますが、以下のような出力が生成されるはずです。

 [2] pry(main)>ユーザー負荷(78.3ms)SELECT"users"。*FROM "users"WHERE"users"。"email"=? ORDERBY"users"。"id"ASC LIMIT 1 [["email"、 "johndoe@example.com"]]ユーザー負荷(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 "、" johndoe@example.com "]、[ "encrypted_pa​​ssword", "$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でメールを送信johndoe@example.comにメールを送信(74.3ms)日付:2016年10月7日金曜日08:41:51 +0100差出人:please-change-me-at-config-initializers-devise@example.com返信先: please-change-me-at-config-initializers-devise@example.comTo:johndoe@example.comMessage-ID:<57f751bfce8d6_18022ac6c272b12840661@kinsomicrote-X553MA.mail> 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 johndoe@example.com誰かがあなたをhttps:// localhost:3000 /に招待しました、あなたは以下のリンクを通してそれを受け入れることができます。http:// localhost:3000 / users / invitation / accept?invitation_token =xmW9uRfyafptmeFMmFBy招待を受け入れたくない場合は、このメールを無視してください。上記のリンクにアクセスしてパスワードを設定するまで、アカウントは作成されません。----==_ mimepart_57f751bfcc725_18022ac6c272b12840524Content-Type:text / html; charset =UTF-8Content-Transfer-Encoding:7bit 

Hello johndoe@example.com

誰かがあなたをhttp:// localhost:3000 /に招待しました、あなたは以下のリンクを通してそれを受け入れることができます。

招待を受け入れる

必要がない場合招待を受け入れるには、このメールを無視してください。
上記のリンクにアクセスしてパスワードを設定するまで、アカウントは作成されません。

---- ==_ mimepart_57f751bfcc725_18022ac6c272b12840524-=>#<ユーザー:0x00558d875fa798 id:4、email: "johndoe@example.com"、encrypted_pa​​ssword: "$ 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.erb  

DeviseInvitableによって利用可能になったルートを確認するには、コマンド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_openerend 

Railsサーバーを再起動します。次に、ブラウザで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をチェックしてください。私と一緒にいてくれてありがとう。


  1. Ruby内部:Rubyオブジェクトのメモリレイアウトの調査

    Ruby内部のクイックツアーをご希望ですか? その後、あなたは御馳走になります。 なぜなら … Rubyオブジェクトがメモリ内にどのように配置されるか、そして内部データ構造を操作していくつかのクールなことを行う方法を一緒に探求します。 シートベルトを締めて、Rubyインタープリターの奥深くへの旅の準備をしてください! アレイのメモリレイアウト 配列を作成するとき、Rubyはそれをシステムメモリと少しのメタデータでバックアップする必要があります。 メタデータに含まれるもの : 配列サイズ(アイテム数) アレイ容量 クラス オブジェクトのステータス(凍結されているかどうか) データが

  2. MRIソースコードの調査

    しばらくRubyを使用している場合は、内部でいくつかのものがどのように機能するかについて興味があるかもしれません。 Rubyの内部を深く掘り下げる1つの方法は、Rubyを機能させるソースコードを読み取ることです。 Cを知らなくても、面白いものをいくつか拾うことができます。 ソースコードは、Rubyのgithubリポジトリにあります。 理想的には、クラス名とメソッド名を簡単に見つけることができるCodequeryのようなツールを使用する必要があります。 コアクラスの調査 ほとんどの探索はルートフォルダで行われます。ここに、Objectなどのすべてのコアクラスのソースコードがあります。 o