ログイン状態によって遷移するページがぁわる
authenticate_user!メソッド
ログインしている状態であればそのまま次のページにいくが、ログインしていない状態であればログインページに飛ぶようにする。
アプリケーションコントローラーにbefore_actionで記述することによって飛ぶようにできる。
before_action :authrnticate_user!と記述することでできる。
投稿検索機能作成
collectionとmember
collectionではルーティングに:idがついていない
memberではルーティングに:idがついている違いがある。
データの処理などを行うプログラム処理を行うもの。
データをどのように処理するのか、どのデータを取得するのかなどを決めていく。
whereメソッド
モデル.where('検索対象になるカラムも含む条件式')といった形でモデルのテーブルで条件と一致するものを情報取得していく。
LIKE句
曖昧な文字列を検索するときに使うもの。最初が あ のものを検索したり、文字列の中にaという文字があるなどを検索するときに使う。
Rails 続き
devise_parameter_santizierメソッド
deviseで言うparamsと同じような役割を持つ。
新規登録やログインなどのリクエストから情報を取得できるようになっている。
.permitを使うとdeiseで定義されているストロングパラメーターに対し、自分で追加したカラムも含めて指定することができる。
devise_parameter_santizierはプライベートメソッド内で使用することができる。
application_controller.rbファイル
これは全てのコントローラーファイルの共通の情報を記述することができるようになっている。
user_signed_in?メソッド
gem 'devise'がインストールされているため使用できる。ログインできているかを判断するために使われる。
リダイレクト
リダイレクトとは本来受け取ったパスとは違うパスに転送すると言うこと。
例えばログインしていない状態である情報を見ようとした際に新規登録のページに遷移したりするのがあると思うが、それがリダイレクトと呼ばれるものになる。
unless?メソッド
unlessではログインしているユーザーではないかどうかを判断するために使うもの。
redirect_toメソッド
redirect_toではリダイレクト先を指定するために使う。redirect_to action: :アクション名 これでリダイレクト先になるアクションを指定する。
expectメソッド
before_actionのオプションとなるものと考えるといい。
expectは除外すると言う意味を持ち、before_actionで事前処理を行うがその処理を行わないアクションを指定するものになっている。
current_userメソッド
ログイン中のidを取得するために使う。
mergeメソッド
ハッシュを統合するときに使う。今回はツイートの情報を持つハッシュと,user_idを持つハッシュの2つをまとめることができる。
has_manyメソッド
一人で複数の投稿していることを表すことができる。
Twitterなどがこれを使うことが多い。
belongs_toメソッド
一つの投稿に一人のユーザーがいることを表すために使う。
current_user.id == @tweet.user_id
上記のif文で囲むことによってログインするときに表示するものと表示しないもので分けることができる。
orderメソッド
並び順を変えるメソッド。だいたい日付順に変えるのが主流。
インスタンス=モデル名.order("並び換えの基準となるカラム名 並び順")
並び順コマンド
ASC 古いものから新しいものの順にする
DESC 新しいものから古いものの順番にする
部分テンプレート
ホームページではヘッダーやフッターなどは同じものになっていることが多い。
ですが、全てのページで同じように記述するとコードが長くなってしまう。
なので1つのページに同じコードを書くことで書く手間をなくしていく。
_〇〇.html.erbと最初に_がついているものが共通のものになる。
renderメソッド
部分テンプレートの呼び出しの際に使うメソッド。
partialオプション
これはrenderメソッドのオプションで部分テンプレート名を記載すると呼び出すことができる。
例 partial: "sample"
localsオプション
部分テンプレートで変数を使えるようにできる。
locals: {post: "hello"}といった形にすると部分テンプレートでpostでhelloと出力できる。
Rails メソッドについて
Rails newではツイートの投稿ページを作成するためのもの
投稿を保存などするものではなく投稿するためのフォームなどを作るために使うと考えておくといい
form_withではメソッドや、urlを指定していたが、コントローラーで
def new
end
といった形でインスタンス変数を指定しているのでmodel: @tweetとすることでメソッドとurlを指定しなくても良くなる。
Tweet.newと指定することで投稿先のパスやHTTPメソッドがいらなくなる
requireメソッドでは欲しい情報を指定することでそこだけゲットすることができる
params.require(:モデル1)といった風にするとモデル1の情報をだけ取ることだけできる
その中でpermitメソッドを使うことで上記のモデル1の中からテキストや、写真、登録した時間など細かく抜き取ることができる
params.require(:モデル1).permit(:キー名 :キー名)で抜き取ることができる
、params.require(:モデル1).permit(:image)といった形にする
プライベートメソッドではclassの外から取り出してほしくない情報を書いていくことができる
バリデーション
バリデーションはからの情報を送信することができないようにするメソッド
validates :name, presence: trueとすることでnameが空の状態で登録できないようにすることができる
ツイートIDにパラメーターを持たせる方法
/tweets/tweetのidとすることでパラメーターを送ることができる
link_to '削除', "/tweets/{tweet.id}", method: :deleteとすると削除ボタンが追加される
editアクション
流れとしてはツイートの編集ボタンを押して、editアクションに遷移して編集作業ページにいく。その後に、編集して編集完了ボタンを押したらupdateアクションで変更することができる。
beforeアクション
コントローラーの処理で同じ処理をするものがあるが、それを最初にまとめて処理して、記述の量を減らす役割を持つ。また、onlyを使うことによってどこのアクションでこの処理を行うのかを指定するコマンド。
before_action :set_tweet, only: :edit, :showといった形で使う
とりあえず今回のRails メソッドに関しては以上とする。