devise ページネーション など 基礎


忘れがちな余談

コントローラーのアクション内に定義されたインスタンス変数はそのアクションのビューで使用することができる。

書くカラムに保存されている値のことをプロパティ値と言います。

ヘルパーメソッド

Railsでは予めviewでHTMLタグを出現させたり、テキストを加工するためのメソッドが用意されています。
これらをヘルパーメソッドと言います。
simple_format 改行で<br>を付与、文字列を<p>で囲ってくれるメソッド
form_tag    フォームを出現させるメソッド
link_to     aタグを出現させるメソッド
などがあります。

CSSファイルの読み込みはHTMLのheadタグ内のstylesheet_link_tagから読み込まれます。

require_treeは、引数として与えられたディレクトリ以下のCSSファイルをアルファベット順に全て読み込むという意味がある。.は引数であり、カレントディレクトリを表します。

application.css
require_tree .

MVC

ルーティング→コントローラー→モデル→ビュー の順に処理が行われるのがRailsです。
モデル・ビュー・コントローラーを使用して処理を行うシステムをそれぞれの頭文字をとってMVCと言います。

フォーム

フォームとはユーザーが情報を入力し、その情報をサーバーに送信するためのもの。
HTMLのコード内にform要素を作成し、その中にinput要素やtextarea要素を入れることで作成できます。
formタグでもフォームは作成できるが、セキュリティの観念上、Railsではヘルパーメソッドである、form_tag, form_for, form_withを使うのが推奨されている。

ユーザーがフォームに入力した値は、コントローラー内ではparamsという変数に入っています。
paramsはハッシュオブジェクトだと考えましょう。
ビューでフォームに入力された情報は、コントローラーにキーと一緒にパラメーターとして送られます。
このパラメーターはparamsというメソッドを使うことで取得することができます。
使用方法は

params[:キー名]

form内のinputやtextareaにあるname属性の値がキー名に当たります。

ストロングパラメーター

ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るようにするもの。
不正な情報などを受け取らないようにするのでセキュリティを強化できます。
任意のストロングパラメーター名_paramsというメソッドを作成することで定義ができます。

xxxxx.rb
private
def sample_params    ###任意のストロングパラメーター名_params
  params.permit(:キー名, :キー名)
end

メソッドの中にはparams.permitと記述して受け取ることを許可するパラメーターのキー名を続けます。
permitメソッドは、ビューから送られてきた情報のハッシュであるparamsから後に続けたキーの名前がバリューと共に新たなハッシュとして生成します。

privateメソッド

class内でprivateと記述するとそれ以降に定義したメソッドはclassの外部から呼び出せなくなります。
外部から呼ばれたら困るメソッドを守れたり、private以下は読まなくて良くなるのでコードの可読性が上がります。

image_tag

Railsではロゴやバナーなど固定して表示したい画像はapp/assets/images以下に置くことが普通です。

sample.html.erb
<%= image_tag 'sample.png' %>

pry-rails

pry-railsとは、Gemの一つであり、Rails向けのデバッグツールです。
これを使うことによりバグの有無を確認したり処理を途中で止めてソースコードが正しいか確認できます。
特に使う機能がbinding.pryです。
これを使うことによって処理を途中で止めて、かつrailsコンソールと同じことができます。止めたいソースコードのところでbinding.pryを記述しましょう。変数の値を取得したり、binding.pryを複数個設置することによって処理が正しく行われているか確認することができます。
処理を再開させたい場合はターミナルでexitを入力します。

sample_controller.

def create
  Sample.create(sample_params)
binding.pry
end

private
def sample_params
  params.permit(:name, :image, :text)
end

投稿画面で投稿する。
(new.html.erb)

するとターミナルでコンソールが立ち上がる

ターミナル.
[1] pry(#<SamplesController>)> params
=> <ActionController::Parameters {"authenticity_token"=>"DnHBKql5oQq9lARgEnK8gQiFAhnTvIVa1XH8d13u7tuVjDUGWPM1eEjVbF44iFms57+VE7+vT3SYUePDy3lwWQ==", "name"=>"aa", "image"=>"https://kumamoto.photo/archives/_data/i/upload/2019/03/13/20190313172208-2113bf9d-la.jpg", "text"=>"dddddddd", "controller"=>"samples", "action"=>"create"} permitted: false>
[2] pry(#<SamplesController>)> params[:text]
=> "dddddddd"

コンソールでparamsと入力すると投稿画面で入力した値がキー名と共にパラメーターとして出力される。

exitと入力すると処理が再開する。

ルートパス

URLにパスを付けない、ホスト名だけのURLのことをルートパスと言います。
routes.rbでの書き方は、

routes.rb
root 'コントローラー名#アクション名'

orderメソッド

インスタンスを並び替えるメソッドです。
全てのレコードを取得してきた場合レコードを並び替えられます。

.order("カラム名 順序の指定”)

ASCは昇順 日付で言うと古い方から
DESCは降順 日付で言うと新しい方から

ページネーション

ページを分割させてくれるもの。1ページ当たりの表示件数を決められます。
gem kaminariを利用することで実装できます。

pageメソッド
このメソッドでページ数を指定できます。全体のページ数でなく、今何ページにいるかと言うことです。

perメソッド
1ページあたりの表示件数を決められます。

sample_controller.
@samples = Sample.order("id ASC").page(params[:page]).per(10)

pageメソッドの引数は、kaminari を導入した際に、モデルクラスにpageというキーが追加されておりそれを記述しています。そのキーの値はビューで指定したページの番号となります。

devise-ログイン機能-

ログイン機能を簡単に実装できるgemです。

Gemfileにdeviseを記述して
bundle install後
アプリのディレクトリで
rails g devise:installと叩くと
設定ファイルが作成されます。
config/initialize/devise.rbconfig/locales/devise.en.ymlです。

アカウント作成のためのモデルを作らなければいけないので
rails g devise モデルクラス名でモデルなどの関連ファイルを作成します。
モデルファイルや、マイグレーションファイルが作成されます。
それと同時に、routes.rb

devise_for :モデル名の複数形

が追記されます。
devise_forはログイン周りに必要なルーティングを一気に生成してくれるdeviseのヘルパーメソッドです。

current_user, user_signed_in?などのヘルパーメソッドも使えるようになっています。

rails g devise:viewsでデバイスのビューファイルを作成できます。

Prefix

ルーティングのパスが入った変数のことです。

unless文

if文の逆で、条件式が偽の時にする処理を記述します。

unless 条件式
 偽の時に実行する処理
end

条件分岐が1行の場合は、1行で記述できる。
puts "ログインしてください" unless user_signed_in?
###ログインしてなければ(つまり偽)"ログインしてください"が表示される

redirect_toメソッド

Railsでは基本的にアクションの処理が終わるとアクションと同名のビューに遷移しますが、redirect_toメソッドを使えば別のアクションを実行したり、ビューに遷移させたりできます。

redirect_to { action: :index }

キーにaction:をとり、値にアクションの名前のシンボル型をとります。
例えば、:indexなどです。{}は省略できます。

before_actionメソッド

コントローラー内のアクションが実行する前に実行したいメソッドを指定できます。シンボル型のメソッド名で指定できます。
オプションでexceptonlyがあり、アクションごとに制限をかけられます。

テーブルにカラムを追加

rails g  migration Addカラム名Toテーブル名 カラム名:型

configure_permitted_parametersメソッド

deviseでログイン機能を実装した際、パラメーターの受け取り方が普通とは違います。ストロングパラメーターは初期状態では、メールアドレスとパスワードのみ受け取る設定がされています。追加するにはconfigure_permitted_parametersメソッドを使います。

application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:追加したいアクション名, keys: [:追加するキー])
end
application_controller.rb
class ApplicationController < ActionController::Base
#  protect_from_forgery with: :exception
 before_action :configure_permitted_parameters, if: :devise_controller?

 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
 end
end