cyber-s / blog

tipsや質問などをここにknowledgeとして残します。
0 stars 0 forks source link

途中 [会社本] Ruby on Rails 5の上手な使い方 現場のエンジニアが教えるRailsアプリケーション開発の実践手法 #898

Open justcallmehide opened 3 years ago

justcallmehide commented 3 years ago

rails console

rails consoleとは、その名の通りrails専用のコンソールで、Railsに用意されているメソッドはもちろん、自分でアプリケーション内に定義したメソッドや、 ロードしているgemもつかうことができます。

rails consoleを実行する時に、testやproductionなど実行する環境することができます。 例えば、本番環境のDBから特定のユーザーを削除しなければならない場合、下記のようにproductionを引数に渡します。

rails console production

rails console --sandbox

またデータを変更することなくコードをテストするためのオプションとしてsandboxがあります。 こうすればDBの削除コマンドを実行してもデータが変更されることはないので、絶対にミスできない状況では、 sandboxで試してから実行しましょう。

初期設定 application.rbとconfig/initializers

共通の設定をapplication.rbに記述することができます。 ただしこのファイルはエントリーポイントとなるファイルなので、主にi18nの設定や、encoding、time_zoneなどを記述します。

実際の初期設定が必要なものは、 config/initializers/ 以下に作成します。ここの置いたファイルはauto loadされるので、requireでいちいち個別に呼び出す必要はありません。

putとpatchの違い

putはリソースそのものの更新を表すのに対し、patchはリソースの部分置換を意味します。ユーザー名を更新するといった場合は、patchを使うことが多いです。

only: [:hoge] / except: [:hoge]

onlyとexceptはroutesやbefore_actionなどでも使えるの覚えておく

routesで、:hogeでcontrollerからparams[:hoge]dで受け取れる

params[]は魔法

Railsだと、パスパラメーター、queryパラメーターは、params[]という統一されたインターフェースで扱うことができます。

MassAssignmentとStrong Parameters(.requireと.permit)

もうこれはRailsのお作法なので覚える

MassAssignmentとは、ボンっと引数にオブジェクトを渡すやつで、脆弱性を孕む。以下のようなやつ。 モデルの属性をこのように、User.create(:user) 渡してしまうと、脆弱性を生んでしまいます。 例えば、悪意のあるユーザーがuserオブジェクトに、管理者を意味する{admin: true}のような属性を付加し、postするなど。

def create
  User.create(user_params)
end

private
def user_params
  params.require(:user).permit(:name, :email)
end

↑の意味としては、 params[:user]を直接使わず、privateのuser_paramsメソッドを呼ぶようにしている。 また、requireとpermitというメソッドを呼び出して、userオブジェクトが必須パラメーターであることを検証し、 その中で、許されるパラメーターをホワイトリスト形式で許可しています。(.permit(:name, :email))

コントローラー機能で重要なフィルタ (before_action / after_action)

特定のアクションの前後に処理を挟み込める便利な機能で、コントローラーをみたらまずここを確認しにいく。

セッションの保存先の話

なぜRedisやmemecachedのようなRilsアプリケーションサーバーとは別のデータストアにキャッシュを保存した方がいいかというと、高速で、複数のサーバー間で同一のセッションが共有できるから。

https://qiita.com/yokoto/items/52a05bca505a30d64130