勉強した項目: Ruby、Rails
時間: 10:45
内容:
*学習アウトプットです。なにぶん間違いなんかもあります。気をつけますがその際はご指摘いただけますと幸いです*
[params]
ビューでフォームに入力された情報は、コントローラにキーと一緒に
パラメーターとして送られる
params
メソッドを使用する際にはparams[:キー名]
という形で使用できる
[ストロングパラメーター]
指定したキーを持つパラメーター
のみを受け取るようにするもの
パラメーター
== name
image
exit
etc
[privateメソッド]
privateメソッド以降に定義したメソッドはclassの外部から呼び出せなくなる
1.classの外部から呼ばれたら困るメソッドを守ることができる
2.可読性 (private以下の部分は目を通さなくて良い)
def test
parameter = test_params
end
private
def test_params
params.permit(:キー名, :キー名)
end
[pry-rails]
pry-railsはRails向けに開発されたデバッグツール
[binding.pry(バインディングプライ)]
pry-railsの機能の中で最も使用
binding.pry
という文字列をソースコードの中に記述することで、binding.pry
という文字列が存在する部分でRails
の処理を止めることができる
処理を再開させたい場合にはexit
というコマンドを入力
ローカルサーバーを終了させる時はexit!
とコマンドを入力
10: def create
11: App.create(tweet_params)
=> 12: binding.pry
13: end
[orderメソッド]
テーブルから取得してきたインスタンスたちを並び替えるメソッド
def index
@contents = Content.all.order("id DESC")
end
orderメソッドは引数として("テーブルのカラム名 並び替える順序")という形を取る
ASC(昇順)
とDESC(降順)
の2種類
[ページネーション]
長い文章を複数のページに分割して、各ページへのリンクを並べアクセスしやすくすること、コントローラーとビューに編集をかける
[kaminari]
RubyのGemの一種
簡単にページネーションを実装することができる
[kaminari:pageメソッド]
ページネーションにおけるページ数を指定する
params
の中にpage
というキーが追加されて、その値がビューで指定したページ番号となる
pageの引数はparams[:page]
[kaminari:perメソッド]
1ページあたりに表示する件数を指定する
変数名 = クラスを利用して取得したレコードのインスタンス.page(params[:page]).per(ここに1ページで表示したい件数を入力)
[kaminari:paginateメソッド]
ページネーションのリンクを表示したいときに使用するメソッド
[devise]
ログイン機能を簡単に作成することができるGem
[rails g devise コマンド]
•deviseで、ログイン機能をつける概念のモデルを作成する際に利用するコマンド
•モデルに加えて、ログイン機能のために必要なカラムが追加されるマイグレーションファイルなどが生成される
[ターミナル]
$ rails g devise 作りたいモデル名
# deviseコマンドでモデルを作成
[devise_for]
devise_forはログインまわりに必要なルーティングを一気に生成してくれるdeviseのヘルパーメソッド
[Rubyタグ]
<%=
と%>
で囲まれた部分で、Rubyタグは拡張子が「erb」のビューファイルで使用することができる
→<%=
と-%>
もある、余計な改行がなくなる
<%= %>
は返り値を出力する
<% %>
は返り値を出力しない
[link_toメソッド]
引数を指定することで様々なリンクを生成できる
通常HTMLコード内でリンクを生成する際にはaタグ
を使用したが、link_to
メソッドを使って記述を行うと、
HTMLコードが読み込まれる際にaタグ
に変換され、aタグ
と同様に、リンク
として表示される
<%= link_to 'App一覧へ', '/tweets' %>
# link_toメソッドを使ってリンクを生成
htmlの要素に指定できるclassなどの属性は、以下の例のように続けてclass: 'sample'
などと書くことで付与することが可能である
<%= link_to 'App一覧へ', '/App', class: 'sample' %>
# 作成したaタグに`class="sample"`属性を付与
link_toメソッドがビューファイルとして
読み込まれる際には、以下の様なHTMLコードになる
<a class="sample" href="/App">App一覧へ</a>
[user_signed_in?]
ユーザーがサインインしているかどうか検証するメソッド
サインインしている場合にはtrueを返し、サインインしていない場合にはfalseを返す
<% if user_signed_in? %>
# ユーザーがサインインしている場合に実行する処理
<% end %>
[prefix]
ルーティングのパスが入る変数のことで、コントローラやビューなどで呼び出すことで、prefixに入っているパスやURL情報を取得できるもの
[unless文]
if文
は、true
の条件で返しをしてくれるが
unless文
は、false
の場合に返しをしてくれる
unless 条件式
# 条件式が偽(false)のときに実行する処理
end
例
puts 'ログインをしてください' unless user_signed_in?
# 以下と同義
unless user_signed_in?
puts 'ログインをしてください'
end
[redirect_toメソッド]
通常、アクション内の処理が終了すると自動的にアクション名と同名のビューが表示されるが、
redirect_to
メソッドをアクション内で利用すると、そこからさらに別のアクションを実行したり、ビューに遷移できる
引数にはaction: :indexという形 action:がキー、 :indexがバリュー
indexのアクションを動かす時は
redirect_to action: :index
[before_action]
コントローラでbefore_action :メソッド名
と記述することで、コントローラのアクションが実行される前にそのメソッドを実行することができる
オプションonly
やexcept
を使うことにより、before_action
を実行することをアクションごとに制限をかけることもできる
only
〜のみ、 except
〜を除く
[カラムを追加するマイグレーションファイルの作成]
rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型
$ rails g migration AddIntroductionToUsers introduction:text
# usersテーブルにintroductionカラムをtext型で追加するマイグレーションファイルの作成
「Add」「Introduction」「To」「Users」と、単語の頭文字が大文字なのがポイント
[スネークケース]
「sample_hoge_huga」のように「_」で単語を区切る
[キャメルケース]
「SampleHogeHuga」のように単語の頭文字を大文字にすることで単語を区切る
[current_user]
現在ログイン中のユーザーのレコードを、userクラスのインスタンスとして取得することができるメソッド
例
# current_userを利用して、ログインしているユーザーのデータを取得する
current_user.name
=> "naru-taka"
current_user.email
=> "naru-taka@gmail.com"
[whereメソッド]
ActiveRecordメソッドのうちの一つ
モデル.where(条件)
のように引数部分に条件を指定することで、テーブル内の条件に一致したレコードのインスタンスを配列型で取得できる
where
メソッドを連続して記述することによって、複数の条件に一致したレコードを取得することもできる
コンソール
[1] pry(main)> App.where('id < 3')
=> [#<App id: 1, image: "test1.jpg", text: "速攻", created_at: "2014-12-06 00:00:00", updated_at: "2018-02-06 00:00:00", user_id: 1>,#<App id: 2, image: "test2.jpg", text: "爆おそ", created_at: "2014-12-07 00:00:00", updated_at: "2014-12-07 00:00:00", user_id: 2>]
# idが3未満のtweetsテーブルのインスタンスを配列で取得
[2] pry(main)> App.where('id < 3').where(user_id: 1)
=> [#<Tweet id: 1, image: "test1.jpg", text: "速攻", created_at: "2014-12-06 00:00:00", updated_at: "2014-12-06 00:00:00", user_id: 1>]
# idが3未満かつuser_idが1のtweetsテーブルのインスタンスを配列で取得