運営者:そうすけ
愛媛のエンジニア兼ブロガー。
工場勤務→社内SE→自社開発にキャリアチェンジ。
主にバックエンド開発を行っています。
【ブログ運営歴】2021.6~
【プログラミング歴】2022.3~
本業:Java,MySQL、個人:Typescript
下記のような非常に単純な記法であるが、「:」がいっぱい出てきたのでこんがらがりましたので整理。
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を引数としています。
コメント