忘れがちな余談
コントローラーのアクション内に定義されたインスタンス変数はそのアクションのビューで使用することができる。
書くカラムに保存されている値のことをプロパティ値と言います。
ヘルパーメソッド
Railsでは予めviewでHTMLタグを出現させたり、テキストを加工するためのメソッドが用意されています。
これらをヘルパーメソッドと言います。
simple_format 改行で<br>
を付与、文字列を<p>
で囲ってくれるメソッド
form_tag フォームを出現させるメソッド
link_to aタグを出現させるメソッド
などがあります。
CSSファイルの読み込みはHTMLのheadタグ内のstylesheet_link_tag
から読み込まれます。
require_treeは、引数として与えられたディレクトリ以下の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
というメソッドを作成することで定義ができます。
private
def sample_params ###任意のストロングパラメーター名_params
params.permit(:キー名, :キー名)
end
メソッドの中にはparams.permit
と記述して受け取ることを許可するパラメーターのキー名を続けます。
permitメソッドは、ビューから送られてきた情報のハッシュであるparams
から後に続けたキーの名前がバリューと共に新たなハッシュとして生成します。
privateメソッド
class内でprivateと記述するとそれ以降に定義したメソッドはclassの外部から呼び出せなくなります。
外部から呼ばれたら困るメソッドを守れたり、private以下は読まなくて良くなるのでコードの可読性が上がります。
image_tag
Railsではロゴやバナーなど固定して表示したい画像はapp/assets/images以下に置くことが普通です。
<%= image_tag 'sample.png' %>
pry-rails
pry-railsとは、Gemの一つであり、Rails向けのデバッグツールです。
これを使うことによりバグの有無を確認したり処理を途中で止めてソースコードが正しいか確認できます。
特に使う機能がbinding.pry
です。
これを使うことによって処理を途中で止めて、かつrailsコンソールと同じことができます。止めたいソースコードのところでbinding.pry
を記述しましょう。変数の値を取得したり、binding.pry
を複数個設置することによって処理が正しく行われているか確認することができます。
処理を再開させたい場合はターミナルでexit
を入力します。
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での書き方は、
root 'コントローラー名#アクション名'
orderメソッド
インスタンスを並び替えるメソッドです。
全てのレコードを取得してきた場合レコードを並び替えられます。
.order("カラム名 順序の指定”)
ASCは昇順 日付で言うと古い方から
DESCは降順 日付で言うと新しい方から
ページネーション
ページを分割させてくれるもの。1ページ当たりの表示件数を決められます。
gem kaminariを利用することで実装できます。
page
メソッド
このメソッドでページ数を指定できます。全体のページ数でなく、今何ページにいるかと言うことです。
per
メソッド
1ページあたりの表示件数を決められます。
@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.rb
とconfig/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メソッド
コントローラー内のアクションが実行する前に実行したいメソッドを指定できます。シンボル型のメソッド名で指定できます。
オプションでexcept
やonly
があり、アクションごとに制限をかけられます。
テーブルにカラムを追加
rails g migration Addカラム名Toテーブル名 カラム名:型
configure_permitted_parametersメソッド
deviseでログイン機能を実装した際、パラメーターの受け取り方が普通とは違います。ストロングパラメーターは初期状態では、メールアドレスとパスワードのみ受け取る設定がされています。追加するにはconfigure_permitted_parametersメソッドを使います。
before_action :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:追加したいアクション名, keys: [:追加するキー])
end
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