![](https://sousuke-neosoul.com/wp-content/uploads/2024/03/shirokuma_0829__multi_expressions__plant_male_fairy__illustrati_aec9d435-94c7-41e3-8e11-e3f1686b2c83_2000x2000-1.png)
運営者:そうすけ
愛媛在住のエンジニア兼ブロガー。
工場勤務から社内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"
}
参考
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UnVieSVFMyU4MSVBRSVFNiU5NiU4NyVFNSVBRCU5NyVFNSU4OCU5NyVFMyU4MSVBOCVFMyU4MiVCNyVFMyU4MyVCMyVFMyU4MyU5QyVFMyU4MyVBQiVFMyU4MSVBRSVFOSU4MSU5NSVFMyU4MSU4NCVFMyU4MiU5MiVFMyU4MiVBRCVFMyU4MyU4MyVFMyU4MyU4MSVFMyU4MyVBQSVFOCVBQSVBQyVFNiU5OCU4RSVFMyU4MSVBNyVFMyU4MSU4RCVFMyU4MiU4QiVFNCVCQSVCQSVFMyU4MSVBQiVFMyU4MSVBQSVFMyU4MiU4QSVFMyU4MSU5RiVFMyU4MSU4NCZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9YTQ4YjM2Yzc4Mjk4MDRkN2YyNmRiZmI2M2UwOGU0YjA&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBLdGEtTSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZmY0YWFkMzU3ZWNlOWFkZGU4Y2JmYjU0ZTdhMGRhOTU&blend-x=142&blend-y=486&blend-mode=normal&s=7fbb5d652aa0f8173dcc2272f2b78df7)
変数名の後に「:」
キーを表現してます。
今回は「:」が入り混じった下記コードで整理していきたいと思います
@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を引数としています。
コメント