- 1. 本章の学習内容
- 1.1. ユーザーモデルの設計
- 1.2. マイクロポストのモデル設計
- 1.2.1. collectionとmemberについて!
- 1.2.2. devise_token_authの使い方
- 1.2.3. バリデーションエラーを日本語にする
- 1.2.4. railsチュートリアル第八章 基本的なログイン機構
- 1.2.5. railsチュートリアル第七章 プロのデプロイ
- 1.2.6. railsチュートリアル第七章 実際のユーザー登録 成功時のテスト
- 1.2.7. 【個人開発】モノやサービスを供養できるアプリを作ってみた。
- 1.2.8. 商品購入機能の実装 〜「商品購入ページへの遷移」の実装①〜
- 1.2.9. Rails RSpec Twitter API モックを作成してみた
- 1.2.10. ルーティングのネストについて!
- 1.2.11. rspecで ActionView::Template::Error:に遭遇した!
- 2. エラー内容
- 2.2.1. 【Rails】EC2サーバーのエラーログを確認する方法
- 2.2.2. 【RSpec】重複するテストコードを共通化しよう
- 2.2.3. RailsとTiDBの統合について
- 2.2.4. [Ruby]any?を||の代わりに使わない
- 2.2.5. devise ストロングパラメータの仕組みを調べてみた。
- 2.2.6. I18n機能 日本語化対応
- 2.2.7. ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )
- 2.2.8. Rails x Herokuでheroku run rails db:migrateした時にError: Duplicate column name “email”となった時の対処方法
【個人用】rails tutorial -2
本章の学習内容
大量の機能を自動生成するscaffoldジェネレータというスクリプトを使ってアプリケーションを生成し、高度なRailsプログラミングとWebプログラミングの概要を学ぶこと
ユーザーモデルの設計
各ユーザーには、重複のない一意のキーとなるinteger型のID番号(idと呼びます)を割り当て、このIDに加えて一般公開されるstring型の名前(name)、そして同じくstring型のメールアドレス(email)を持たせます。emailはユーザー名としても使われる
マイクロポストのモデル設計
テキスト内容を格納するtext型のcontentだけで構成されています 。しかし実際には、マイクロポストをユーザーと関連付ける必要があります。そのため、マイクロポストの投稿者を記録するためのuser_idも追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1617255/a19fe1f
collectionとmemberについて!
#①.結論!
collectionとmemberは、ルーティングを設定する際に使用でき、生成されるURLとコントローラーを
任意にカスタムできるメソッドのことです!
collectionはルーティングに:idがつかない!
memberは:idがつくという違いがあります!
1つずつ使用例を見ていきましょう!
#②.collection
collectionで定義した場合は、以下のように例になります!
“`php:routes.rb
Rails.application.routes.draw do
resources :eats do
collection do
get ‘search’
end
end
end
“`collectionのルーティング
“`php
Prefix Verb URI Pattern
search_eats GET /eats/search(.:format) eats
devise_token_authの使い方
#devise_token_authとは
***新規登録、ログイン、ログアウトなどの機能を実装する時に、***
使用し、***トークン認証***という、“`ユーザー認証“`ができるgemです。
この記事ではdevise_token_authの設定を説明していきます。#Gemfileの設定
まずはGemfileの設定からです。
下のgemをGemfileに追記します。“`Gemfile
gem “devise”
gem “devise_token_auth”
gem ‘rack-cors’ #URLのアクセスが重複することを許可してくれる。
“`
その後“`bundle install“`をします。#インストール
下のコマンドでインストールします。“`
rails g devise:install
“`
でdeviseをインストールします。“`
rails g devise_token_auth:install User auth
“`
devise_token_authをインストールします。
“`authは認証“`のことです。
バリデーションエラーを日本語にする
#目的
ここでは、バリデーションエラーを日本語にする方法の大枠を記述します。(モデル名以外)
ちなみに、モデル名やdeviseのエラー文を日本語設定したい場合は、参考文献からのリンク記事を参考にしてください!##開発環境
rails6.0.0
mysql##参考文献
こちらを参考にさせていただいております!
本当にわかりやすくてありがとうございました!!
[■Railsのバリデーションエラーのメッセージの日本語化](https://qiita.com/Ushinji/items/242bfba84df7a5a67d5b)
→モデル名まで日本語にしたい方は、こちらをご参考ください![■translation missing: ja.activerecord〜のエラー対応](https://qiita.com/nkekisasa222/items/0c566ced53f7ee47d67d)
[■https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml](https://github.com
railsチュートリアル第八章 基本的なログイン機構
今回はユーザーがログインやログアウトを行う。
本章では、ログインの基本的な仕組みを実装
ブラウザがログインしている状態を保持し、ユーザーによってブラウザが閉じられたら状態を破棄するといった仕組み
ログイン済みのユーザー(current user)だけがアクセスできるページや、扱える機能などを制御していきます。
このような制限や制御の仕組みを認可モデル(Authorization Model)という。##セッション
ユーザーログインの必要なWebアプリケーションでは、セッション(Session)と呼ばれる半永続的な接続をコンピュータ間(ユーザーのパソコンのWebブラウザとRailsサーバーなど)に別途設定します。Railsでセッションを実装する方法として最も一般的なのは、cookiesを使う方法
….。新しいブランチを作る
“`
$ git checkout -b basic-login
“`
###Sessionsコントローラ
ここでは“`new“`アクションを作る“`rb
ubuntu:~/environment/sample_app (basic-
railsチュートリアル第七章 プロのデプロイ
##プロのデプロイ
“`
$ git add -A
$ git commit -m “Finish user signup”
$ git checkout master
$ git merge sign-up
“`###本番環境でのSSL
ユーザー情報が流出する可能性がある。
ネットワークに流れる前に情報を暗号化させる技術TLS(略称)がある。
今回はユーザー登録ページのためだけにSSLを導入できる。以下利点
・Webサイト全体で適用
・ログイン機構をセキュア
・セッションハイジャック(Session Hijacking)の脆弱性に対しても多くの利点SSLを有効化するのも簡単です。production.rbという本番環境の設定ファイルの1行を修正するだけで済みます。
configに「本番環境ではSSLを使うようにする」という設定をするだけです###演習
1.ブラウザから本番環境(Heroku)にアクセスし、SSLの鍵マークがかかっているか、URLがhttpsになっているかどうかを確認してみましょう。
確認2.本番環境でユーザーを作成してみましょう。Gravatar
railsチュートリアル第七章 実際のユーザー登録 成功時のテスト
###実際のユーザー登録
今まで実験でユーザー登録をしているので一度リセット“`
$ rails db:migrate:reset
“`
“` rails s“`でサーバーを起動させる。
新しくユーザー情報を登録し、flashのメッセージを表示させる
再読み込みするとメッセージがなくなる。###演習
1.Railsコンソールを使って、新しいユーザーが本当に作成されたのかもう一度チェックしてみましょう。結果は、リスト 7.30のようになるはずです。“`
>> User.all
User Load (0.2ms) SELECT “users”.* FROM “users” LIMIT ? [[“LIMIT”, 11]]
=> #
【個人開発】モノやサービスを供養できるアプリを作ってみた。
## はじめに
![top-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/8e094d39-f9f2-fa91-6e7b-443b22c5c7c7.png)>・買ったばかりのスマホを落として画面バキバキになってしまった
>・サポート終了になるInternetExplorer
>・元カレのくれたプレゼント「どうしよう…」
そのあと湧き上がる
「やり場のない気持ちをぶつけたい」
みなさんにもそんな時があると思います。
お世話になったモノやサービスに敬意を込めて供養してあげる。
とても慈悲深いアプリが出来ました。
https://omailly.jp/
## サービス概要
投稿されたタイトルをクリックすると、専用のお墓に見立てた位牌が鎮座しています。
![moko.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/bcdcde41-963a-26bc-fc31-2
商品購入機能の実装 〜「商品購入ページへの遷移」の実装①〜
#はじめに
先日、最終課題アプリ作成において「商品購入機能」の実装を開始しました。
__最大のヤマ場__といわれており、恐らく実装に時間がかかると思います。そこで、これまで自身が学んできた内容や考えた過程などを、記事として残していこうと思います。駄文・長文になること請け合いですが、ご覧いただけると幸いです。
ただし、現時点での私の知識・技術については__プログラミングという大海原に片足の親指を突っ込んでちょんちょん水面を揺らしている程度__(だと思っている)ので、__「それ、ちょっと間違っているよ!」__というご指摘や、__「こうした方がいいよ!」__というご意見をいただけると、非っっっっっ常ありがたいです。泣きながら土下座して喜びます。
#「商品購入ページへの遷移」の実装①
__とりあえず商品購入ページに遷移できないと始まらないだろ!!!__
ということで、商品購入ページへ遷移できるようにしました。見本サイトの商品購入ペー
Rails RSpec Twitter API モックを作成してみた
# 概要
Twitter APIを使用したメソッドのモックを作成したい。# モックとは
>モックとはざっくりいうと 「本物のふりをするニセモノのプログラム」 のことです。
何らかの理由で本物のプログラムが使えない、もしくは使わない方がよいケースでモックが使われます。>たとえば、外部のAPIを利用しなければならない場合です。
実際、このあとで紹介するサンプルプログラムでもTwitterのAPI(gem)経由でツイートするプログラムを使っています。参考
https://qiita.com/jnchito/items/640f17e124ab263a54dd
# 今回モックを作成したいメソッド
“`ruby:model.rb
# Twitterclient
def twitter_client
Twitter::REST::Client.new do |config|
config.consumer_key = ENV[“CONSUMER_KEY”]
config.consumer_secret = ENV[“CON
ルーティングのネストについて!
#①.結論!
ネストは、ある記述の中に別の記述をして、親子関係を示す方法です!
「入れ子構造」とも呼ばれます!
ルーティングにおけるネストとは、あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです!
ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidをparamsに追加してコントローラーに送るためです!
例を見ながら解説していきます!
#②.記述について!
下記が記述の形になります!
“`php:routes.rb
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
“`ルーティングでネストを利用すると、アクションを実行するためのパスで、親子関係を表現できます!
例えば、eats_controller.rbのルーティングの中にcomments_controller.rbのルーティングを記述します!
ネストを利用したときに設定されるルーティングの例を見てみま
rspecで ActionView::Template::Error:に遭遇した!
メール送信機能を追加した後に、いつも通りプルリクだして自動テストの結果を待ってた
rspec関連は今回いじってなかったのでエラーの通知がslackに飛んできてびっくりし^^;エラー内容
“`
2) PostProduct valid if post_id is different
Failure/Error:<%= link_to 'クリックして登録を完了する', controller: 'users/confirmations', action: 'create', confirmation_token: @token %>
ActionView::Template::Error:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
“`exampleは16作っているのですが、出たエラー全てこれでした。
エラーに
【Rails】EC2サーバーのエラーログを確認する方法
先日unicornの自動デプロイでエラーが起き、解決に時間がかかってしまったため、エラーログで素早く原因究明するための手順を備忘録としてアウトプットしていきます。
#前提条件(本番環境)
・仮想OS:AWS(EC2)
・WEBサーバ:Nginx
・アプリケーションサーバ:unicorn
・データベース:MariaDB# エラーログを確認する際の注意点
※unicornでエラーが起きた場合の、エラーログの確認場所はすでに自身で設定しているはずです。
そのため人によってディレクトリ名が異なる場合があります。以下を確認しましょう。“`config/unicorn.rb
(省略)#エラーのログを記録するファイルを指定
stderr_path “#{app_path}/log/unicorn.stderr.log”(省略)
“`# エラーログを確認する手順
※個人情報保護の観点から、一部コードを改変しています。
※ここでは分かりやすいように`lsコマンド`を使って、適宜ディレクトリの中身を確認しています。“`
ユーザー名@PC名 ~ % cd .ssh/
ユーザ
【RSpec】重複するテストコードを共通化しよう
重複するテストコードはshared_contextやshared_examplesで共通化できる
##rails_helperの設定
下記の記述のコメントアウトを外す
“`spec/rails_helper.rb
…
Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }
…
“`↑を忘れると下記のエラーで怒られる
“`
ArgumentError:
Could not find shared context “hogehoge”
“`##shared_contextで重複するコードをまとめる
spec下にディレクトリを作成して共通化したい処理を記述
“`spec/support/contexts/login_setup.rb
RSpec.shared_context ‘login setup’ do
before do
Rails.application.env_config[“devise.mapping”] = Devi
RailsとTiDBの統合について
![shutterstock_1043482054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/524a55d6-154e-ea40-76de-66584c740def.png)
*この記事は [dev.to](https://dev.to/hooopo/getting-started-with-rails-tidb-4pni)で発表されたものです。*このチュートリアルは、RailsとTiDBの統合に関する、おそらくWebで初めてのチュートリアルです。TiDBは、水平的なスケーラビリティ、高可用性、MySQLとの互換性を特徴とする、オープンソースの分散SQLデータベースです。
初心者にとって、ActiveRecordのような複雑なORMをTiDBに統合するのは難しい可能性があります。Web上にはこのトピックを扱っている記事がほとんどないことから、私はRailsユーザーによるTiDB導入を支援するために、このチュートリアルを執筆しました。
## TiDB開発環境をローカルで構築す
[Ruby]any?を||の代わりに使わない
Rubyの配列(Array)には`any?`という便利メソッドがあります。
https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html
> すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。ブロックが真を返した時点で、ただちに true を返します。上記はドキュメントから転記しました。
any?を使うことで、配列内に特定の条件を満たした要素が1つ以上あること(または存在しないこと)を確認することができます。
また、真の要素が見つかったら以降の判定は行われないと記載されているため計算効率も良いです。簡単に動作確認をしてみます。
配列`[5, 3, 4]`の中に3以下の数値があるかをチェックしています。
何が判定されたか可視化できるように判定ごとに`p _1`で判定した要素を出力するようにしています。“`irb
irb(main):005:
devise ストロングパラメータの仕組みを調べてみた。
##はじめに
サインアップページにdeviseのデフォルトで許可されている要素ではない、”username”を追加することになり、deviseでのストロングパラメータの設定方法を調べた時のことを備忘録として投稿します。##ストロングパラメータとは
**特定のパラメーターのみを許可することで、モデルへの不正なパラメータの流入を防ぐ仕組みのこと。**MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されましたものです。deviseにおいては、モデルにパラメータを送ることのできるアクションは、3つに限定されており、パラーメータも以下のように限定されています。
|action| allowed params|
|:-:|:-:|
|sign_in | authentication keys |
|sign_up | authentication keys, password,password_confirmation |
|account_update| authentication keys,password, pa
I18n機能 日本語化対応
1.デフォルト言語の設定
デフォルト言語を日本語に変更するため、下記のコードを`config/application.rb`に追加
“`ruby:config/application.rb
module I18nApp
class Application < Rails::Application config.i18n.default_locale = :ja # 追加 end end ``` 2.ja.ymlの作成 ![スクリーンショット 2021-10-13 230300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273803/0df3ff68-b2c4-d1e5-4990-ffcbe93b2f25.png)
ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )
#はじめに
ある日突然、rails s でエラーが発生したので解決した方法を記録します。
誰かの参考になることを祈ります。#開発環境
– macOS BigSur 11.6
– zsh: 5.8 (x86_64-apple-darwin20.0)
– Ruby: 2.6.3
– Rails: 6.1.4.1#発生したエラー
localhost:3000: ![Access denied for user ‘root’@’localhost’ (using password: NO)](https://kitsune.blog/wp-content/uploads/access-denied.png “”)“`zsh:
$ mysql.server start#出力
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.local.pid).
“`
その後、brew doctor、アクセス権限の再付与、エラーログのファイルを覗いて対
Rails x Herokuでheroku run rails db:migrateした時にError: Duplicate column name “email”となった時の対処方法
# エラー内容
`git push heroku master`して`heroku run rails db:migrate`したら以下エラーが発生~~~
Mysql2::Error: Duplicate column name ‘email’
~~~↓このファイルがおかしいとのこと
~~~db/migrate/20211003044016_add_email_to_inquiries.rb
class AddEmailToInquiries < ActiveRecord::Migration[6.1] def change add_column :inquiries, :email, :string end end ~~~ ↓追加先テーブルを見たらすでにemailが追加されている ~~~db/migrate/20211002233717_create_inquiries.rb class CreateInquiries < ActiveRecord::Migration[6.1] def change create_table :inquir