【rails】「:」の記法でこんがらがる為整理

運営者:そうすけ

愛媛在住のエンジニア兼ブロガー。
工場勤務から社内SEにキャリアチェンジ。
主に社内向けのシステム開発を行っています。

【ブログ運営歴】2021.6~
【プログラミング歴】2022.3~

本業:Java,MySQL、個人:Javascript

下記のような非常に単純な記法であるが、「:」がいっぱい出てきたのでこんがらがりましたので整理。

    def index
        #取得
        @books = Book.all 
        #where区で記載
        @books = @books.where(year:params[:year]) if params[:year].present?
        @books = @books.where(month:params[:month]) if params[:month].present?
    end
目次

railsにおける「:」って?

シンボルという名前です。ハッシュで使用します。

シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、両者を仲立ちするような存在です。

https://docs.ruby-lang.org/ja/2.3.0/class/Symbol.html

ハッシュとはRuby言語でデータ構造をもつオブジェクトです。

hash = {'key' => 'value'}

キーの後にアロー「=>」が入って、その後バリューで表現されます。

よく「params」を使用しますが、あれはHTTPリクエストのヘッドに、ハッシュという形でこのようなオブジェクトで送られてきます。

{
  "controller" => "posts",
  "action" => "show",
  "id" => "1",
  "category" => "ruby"
}

このようなハッシュですが、可読性を高めるためにシンボルという「:」で表記されます。

JSONやtypescriptのオブジェクトの表記と同様です。

{
  controller: "posts",
  action: "show",
  id: "1",
  category: "ruby"
}

参考

変数名の後に「:」

キーを表現してます。

今回は「:」が入り混じった下記コードで整理していきたいと思います

@books = @books.where(year:2024)

where関数の引数がハッシュオブジェクトであるため、yearをキーとして定義し、その後に値を書いて実行しています。

「:」がきて変数名

  • ハッシュの値の取り出し
  • メソッドの指定

ハッシュ値の取り出し

ハッシュからキーを指定して値を取り出す方法です。

{
  controller: "posts",
  action: "show",
  id: "1",
  category: "ruby"
}


@book = params[:id]

bookにはidに対応する1が入る

メソッドや変数の識別子

下記のような例の場合、before_actionのあとの:set_bookは関数の指定を表現します。

before_action :set_book,only: [:edit]

def edit

end

def set_book
        @book = Book.find(params[:id])
    end

これは:set_bookというシンボルをbefore_actionの引数として指定しています。

rubyの関数の引数は()を省略できます!わかりにくい!!

”set_book”などの文字列と似た概念でもあり、動作は可能のようですが、シンボルとして示すことで、

①メモリの節約
②一意性
③定数としての扱い

が可能になります。

rubyでは基本的に関数が定義された時点で、裏にシンボルが定められます。

この場合、before_actionの引数の関数を指定するため、関数として提示した時点で作成されている一意なシンボル名の:set_bookを引数としています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次