1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails備忘録】「@」で始まるインスタンス変数と「:」で始まるシンボルの違い

Posted at

現在テックキャンプの短期集中コースを受講しているKengineerです。

5月上旬に短期集中コースで受講を開始して、ここまで駆け足で進めてきました。
アウトプットが全然できていないことを反省し、カリキュラムで学んだことや、最終課題、オリジナルアプリ開発に関連した内容を、投稿していきたいと思います。

まずはにフォーム実装でよく出てくる「@」で始まるインスタンス変数と「:」で始まるシンボルの違いや、コントローラーはじめ、html.erbの中での記述方法が最初学んだときに全然頭に入ってこなかったので、今の自分の理解を備忘録としてまとめてみます。

1. 「@」で始まるインスタンス変数とは?

  • コントローラーで定義するインスタンス変数
  • たとえば「@categories」「@user」など
  • ビュー(HTML)にデータを渡したいときに使う
  • インスタンス変数をコントローラーで定義し忘れると、ビューでエラーになるので注意

例:コントローラーでの定義

# app/controllers/items_controller.rb
def new
  @categories = Category.all
  @item = Item.new
end

このように定義すると、@categories@itemはビュー(erbファイル)で使えるようになる

2. 「:」で始まるシンボルとは?

  • これは 「シンボル」と呼ばれるRubyのデータ型
  • たとえば「:name」「:id」「:category_id」など
  • 主に「属性名」や「カラム名」などを指定する時に使う
  • シンボルはイミュータブル(変更不可)で、メモリ効率が良いという特徴

例:ActiveHashのモデル

class Category < ActiveHash::Base
  self.data = [
    { id: 1, name: '---' },
    { id: 2, name: 'メンズ' },
    { id: 3, name: 'レディース' }
  ]
end

この場合、:name:idは「name」や「id」という属性名を指します。

3. フォームでの使い分け例

フォームで「カテゴリーを選択」できるようにするには、collection_select というヘルパーを使う

例:

<%= f.collection_select(:category_id, @categories, :id, :name, {prompt: "---"}) %>

それぞれの意味

部分 意味・役割
:category_id 保存先のカラム名(ここに選択したidが入る)
@categories 選択肢として渡す配列(コントローラーで用意したインスタンス変数)
:id 選択肢のvalue属性に使うカラム名(ここではCategoryのid)
:name 選択肢の表示名に使うカラム名(ここではCategoryのname)
{prompt: "---"} 先頭に「---」という選択肢を表示するオプション

4. まとめ

  • 「@」で始まるもの(@categoriesなど)
    → コントローラーで用意した「データそのもの」(配列やオブジェクト)。ビューに渡すために使う

  • 「:」で始まるもの(:nameや:category_idなど)
    → 「属性名」や「カラム名」などをシンボルで指定。RubyやRailsでよく使う書き方
    Pythonなど他の言語と違うので最初は違和感があるかも

5. さいごに

まだRails学習始めたばかりですが、「@」で始まるインスタンス変数と「:」で始まるシンボルの違いを意識しながら記述することで、理解が深まりやすくなった気がします。

もし間違いや補足があればコメントで教えてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?