LoginSignup
2
1

More than 3 years have passed since last update.

Rails基礎の基礎【復習用】

Last updated at Posted at 2021-04-09

ちょっとフロントのコーディングを3ヶ月くらいやっただけで、
Railsのファイルのこれってなんだっけ?ってなるので、二度と調べなくていいよう、まとめてます。

プログラミング基礎知識

配列とハッシュの違い

配列: 複数個の情報を保存することができるリスト
siritori = ["りんご", "ゴリラ", "ラッパ", "パセリ"]

//最初の値=0としてインデックスで番号が振り分けられていて、一つずつ取り出せる
siritori[0] = りんご
sitritori[3] = パセリ
ハッシュ: 複数この情報をキーとバリューに分けて保存できるリスト
meibo = {172 = "yuki, 184 = "naoki", 153: "naomi"}

meibo[:172]
=> "yuki"

CRUD(クラッド)

ほとんどのwebアプリケーションで実装されているCreate Read Update Delete機能のこと

ActiveRecordとは

rubyとデータベースの言語であるSQLを繋ぐ翻訳機のような役割をする。 本来データベースからデータの取得や削除などをおこなうには、SQLのコマンドの実行が必要。
しかしこのActiveRecordでは、SQLを書かずにRubyコードでデータをとってくることを可能になっている。

メソッド 何ができるか
find 主キーをもとにデータを取得する
find_by 該当する最初のデータを取得する
where 該当するデータを全て取得する
all 全てのデータを取得する

allとfind_byは使いがち。
こんな感じ↓

nantoka.controller
 def index
    @menus = Menu.all
  end

・参考記事: Active Recordでデータベースの操作をしてみよう【find・where編】

deleteとdestroyの違い

deleteメソッド: ActiveRecordを使わない

SQLを直接実行することで削除する。
ActiveRecordを使わない=モデルを経由しないので、モデルで関連付けされているレコードがあったとしても、そちらは削除されない。

destroy: ActiveRecordを使う

ActiveRecordを介して、指定した条件のレコードを削除するメソッド
モデル内で、dependent: :destoryが設定されていれば、関連付けされているデータも併せて削除される。
ActiveRecordを介しているので、callbackメソッドやバリデーションを機能させることもできる。
例えば、ブログ記事を消してそこに紐づけられているコメントなども削除したい、という場合はdestroyを使う。

・参考記事: 
[Rails]deleteメソッドとdestroyメソッドの違いについて!![初心者]
Rails開発者が採用面接で聞かれる想定Q&A 53問(翻訳)

redirectとrenderの違い

コントローラを経由するかしないかの違い。
投稿データを保存するという処理をする場合、保存に成功した場合はredirect、失敗した場合にはrenderを使うという使い分け(引用: 【Rails】redirectとrenderの違いは?

redirect

リクエスト送信
→ ルーティングでコントローラとアクションを特定
→ 指定のコントローラ内のアクションが動作
→ 動作したアクションに対応するビューファイルがレスポンスとして表示される

render

指定のビューファイルを表示

config/credentials.yml

Rails5.2から?導入された秘匿キーなどを隠す場所。credentials.yml.encはmaster keyを利用して暗号化・復号される。
master.keyとcredentialsファイルはrails newしたときに自動で作られ、master.keyはデフォルトで.gitignoreに入っているので、githubから流出する心配も無用。

・参考記事: 
Rails5.2から追加された credentials.yml.enc のキホン
【Rails】credentials.ymlでシークレットキーなどを管理する

.envファイル=大事な情報を隠すところ

見せちゃいけないAPIログインIDとかを格納する場所。
リモートリポジトリに間違ってもpushしないよう.gitignoreに以下のように必ず記載する。
大体gem dotenv-railsと併用する。

gitignore.
/.env

paramsとは

paramsとはユーザー(クライアント)から送られてきたデータが格納されているハッシュのこと。
ユーザーがブラウザ上でHTTPリクエストを送ってきた時、リクエストで送られてくる情報(一部)を パラメーター(paramater)という。
そのparams の中にはリクエストの情報が入っており、情報はハッシュの形で格納されている。

変数 = params[:id]

Routing

HTTP動詞はクライアントが行いたい処理をサーバーに伝えるという役割がある。

Railsでは以下の4種類のHTTP動詞がある。

・GET・・・サーバーからブラウザに情報を返す。単にウェブサイトを閲覧したいときに利用される。
・POST・・・ブラウザからサーバーにリソースを送信し作成する。フォームでデータを保存したいときに利用される。
・PATCH・・・リソースを更新する。データを更新したいときに利用される。
・DELETE・・・リソースを削除する。データを削除したいときに利用される。

Gem

Gemfileに記載する際の基本的な文法

・gem 'gem名', 'バージョン', 'オプション'

例) gem 'rails', '~> 5.1.6'
例) gem 'bootsnap', require: false
※require:falseとは・・・アプリケーションには反映させずに、ターミナルにのみ反映させる。Bundler.requireなどをした時に含まれなくなる(rubocopなど、bundlerによってアプリ側に自動で読み込む必要がないものに指定する)

Gemのバージョン指定の記号の意味
1 2
・'5.0.0' 5.0.0にバージョン固定
・'>=5.0.0' 5.0.0以上
・'~>5.0.0' 5.0.0以上5.9.9以下(メジャーのバージョンが上がるのは不可)
・'>=5.0.0', '< 5.3.0' 5.0.0以上5.3.0未満のみ使える

    
・参考記事: 初学者がGemのversionを固定しないほうがいい理由

よく見かけるGem達

・Rubyのアプリケーションサーバ: Unicorn / Puma / Passenger
rails sするために必要なやつ。

参考記事:
なぜrailsの本番環境ではUnicorn,Nginxを使うのか?  ~ Rack,Unicorn,Nginxの連携について ~【Ruby On Railsでwebサービス運営】
Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)

mini_racer

アセット生成にSprocketsを使う場合は、mini_racerがあると高速に実行できます。
JavaScriptやCSSのコンパイルに使う各種のツールはJavaScriptで書かれたものが多いので、それらを呼ぶのに何かしらのJavaScript処理系が必要となります。「別にNode.jsを入れる」という選択肢もありますが、プロセス内で処理できるmini_racerのほうが数段速いです。(引用元記事)

ユーザー認証、ログイン: device, sorcery
環境変数を管理するGem
Gemfile.
gem 'dotenv-rails'
env.sample
TWITTER_CONSUMER_KEY=ここにCONSUMER_KEY
TWITTER_CONSUMER_SECRET=ここにCONSUMER_SECRET

.envファイルで↑のように設定し、呼び出したいcontrollerファイルなどでENV['TWITTER_CONSUMER_KEY']で呼び出してくる感じ。

参考記事

yieldメソッドについて

yieldメソッドとは簡単にいうと、一つのレイアウトの中に別のレイアウトを持ってくることができるrubyのメソッド。
railsだとアプリケーションのレイアウトをまとめた「application.html.erb」ファイルが
あるがこのファイルのbodyタブに記載されている。

application.html.erb
<body>
 <% =yield %>
</body>

・参考記事: yieldメソッドについて

開発コマンド

新しいGemを追加した時

bundleインストール後、docker再起動

$ docker-compose run web bundle install
$ docker-compose restart

dockerでgemの永続化

参考記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1