Help us understand the problem. What is going on with this article?

TECH  DAY 4

More than 1 year has passed since last update.

勉強した項目: 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 :メソッド名と記述することで、コントローラのアクションが実行される前にそのメソッドを実行することができる

オプションonlyexceptを使うことにより、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テーブルのインスタンスを配列で取得
Naru-taka
航空整備士→放射線技師→プログラマー 勉強中により、エンジニアとして生きていく。 無限の可能性を信じて学習したい、、、 Techにて57期としてスタートする。
https://naru-taka-kokua.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away