はじめに
Ruby on Railsを勉強しはじめました。
色々な事ができて便利だな〜なんて思っていると、こんなコードに出会います。
def create
@user = User.new(
name: params[:name],
email: params[:email],
image_name: "default_user.jpg",
password: params[:password]
)
なんだこれ!!!
「 : 」が前にあったり後ろにあったりして意味が分からないぞ!!!
Railsにおける「 : 」の意味を整理する
Ruby on Railsでは、コロン( : )がよく出てきます。
email: と :email のように、見た目は似ているのですが、役割は全く違います。
ここを雰囲気で流していると、どっちにコロンを付ければ良いのかが分からなくなってしまうので、しっかりと意味を整理していきましょう。
:email はシンボル
: を前につけた :email はシンボルです。
params.require(:user).permit(:email, :name)
この :user や :email はすべてシンボルで、「この名前のキーを使う」という指定になっています。
シンボル(Symbol)とは
シンボルは、Rubyにおける「名前」や「ラベル」みたいなものです。
文字列に似ていますが、次の特徴があります。
- 同じ名前なら同じものとして扱われる(比較が速い)
- 変更できない(イミュータブル)
- 設定名やカラム名のような「識別子」に向く
例えば :email は「emailという名前そのもの」を表しています。
シンボルは内部で文字列ではなく整数として扱われています
なので変更はできず、比較も早いのです
email: はハッシュのキー指定
一方 email: はハッシュの書き方です。
Ruby 1.9以降の省略記法で、シンボルをキーにするハッシュを短く書けます。
{ email: "a@example.com" } #ハッシュで省略形
{ :email => "a@example.com" } #本来の書き方で、上記と同じ意味
ハッシュ(Hash)とは
ハッシュは、Rubyにおける「キーと値の組み合わせ」を扱うための入れ物です。
配列のように順番でアクセスするのではなく、キー(名前)で値を取り出します。
- キーと値をセットで保存する
- キーで検索できる(読みやすい)
- 設定や属性など「名前付きデータ」に向く
email:というような形をみたら「これはハッシュのキーなんだな!」と思えると分かりやすいです。
Railsでの具体例
params の例(password: params[:password])
{ password: params[:password] }
ここで password: はハッシュのキー指定で、実体は :password です。右側の params[:password] は、params(ActionController::Parameters)から :password というキーの値を取り出しています。
同じ意味に書き直すとこうなります。
{ :password => params[:password] }
params[:password] は「リクエストで受け取った password の値を引く」処理です。全体としては「受け取ったpasswordを、password というキーでまとめたハッシュを作る」形になります。
まとめ
- シンボルは「名前そのもの」で、
:emailのように書く -
email:は「シンボルキーのハッシュ」の省略記法で、実体は:email =>と同じ - Railsのコードでは「
email:はハッシュ」「:emailはシンボル」と覚えると迷いにくい