はじめに
Rails製のWebアプリケーションの中で、Controller
ファイル内でよく見る
def show
@instance = Model.find(params[:id])
end
こういうやつ。いままで、何の気なしに書いてみましたが、断片的な知識をまとめたらいろんな気づきがあったので、丁寧に調べたことを書いて行きます。結構当たり前な内容なので、本記事対象者は最近Railsをはじめた人向けです。
上のコードの概要
これに関して、色々な疑問が湧いたので、それについて調べてみました。
なぜ@
を先頭に付けたものに代入するのか
まず、代入されているものはインスタンス変数です。
では、なぜインスタンス変数は、先頭に@
をつけるかというと、ruby言語文法の決まりで、インスタンス変数は先頭は@
から始める約束ごとなので、としか言えません。
なぜインスタンス変数に代入するのか
ではなぜ、普通の変数ではなく、インスタンス変数に代入するのかというと、インスタンスメソッドを利用したいからだと思います(他にも様々な理由はあると思います)。インスタンス変数を経由することでController
からView
へ変数を渡すことができます。
今回のインスタンス変数に代入されているデータは、イコール(=
)の右側を見ればわかりますが、モデルのインスタンスです。モデルのインスタンスとは、1つのオブジェクト、またはデータベースの一つのレコードと言い換えてもいいかもしれません。
あまり関係ないデータですが、Rails console
を使用して、あるモデル(Message
)の、ある1つのオブジェクトをみて見ると以下のようになります。
> Message.find(2)
Message Load (0.3ms) SELECT `messages`.* FROM `messages` WHERE `messages`.`id` = 2 LIMIT 1
=> #<Message id: 2, content: "samlple1", created_at: "2018-06-04 03:28:06", updated_at: "2018-06-04 03:28:06">
下記が、1つのオブジェクトであり、データベースの一つのレコードと言い換えてもいいかものやつです。
#<Message id: 2, content: "samlple1", created_at: "2018-06-04 03:28:06", updated_at: "2018-06-04 03:28:06">
インスタンス変数に代入する理由に戻りますが、例えば、このコントローラーのアクションに対応するViewで上記のオブジェクトを、部分的にでも使いたいとします。そんな時に、メソッドを使用すれば簡単に使えるのでインスタンス変数を用いるのだと思います。
findとは
find
はモデルの検索機能を持つメソッドです。モデルと紐づいているデータベースのテーブルから、レコードを1つ取り出す場合に、find
メソッドを使います。
paramsとは
paramsとはRailsで送られてきた値を受け取るためのメソッドです。送られてくる情報(リクエストパラメータ)は主に、getのクエリパラメータとPostでformを使って送信されるデータの2つです。
params[:カラム名]
で値を受け取ることができます。
コロン記号(:
)について
コロン記号(
:
)はシンボルの意味です。シンボルはオブジェクトの一つで、ハッシュのキーとしてよく使用されます。シンボルのメリットとして、メモリを消費せず、可読性があがり、処理が高速になる。
以上です。ありがとうございました。