質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

1259閲覧

【Rails】Viewでインスタンス変数が使用できる理由 / コントローラークラスはどこでインスタンス化をしているのか。

nyako

総合スコア45

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2021/08/06 16:59

編集2021/08/06 17:04

2つ質問をさせていただきます。

1, Viewではクラスでもないのにインスタンス変数が使用できる理由は何でしょうか。
コントローラークラスのメソッド内で@productsにすれば該当ビューにもってこれて表示ができるというのは分かるのですが、
ただそれがなぜなのか言葉にして説明してくださいと言われるとできないので知りたいです。

ruby

1# ProductsControllerクラス 2 3class ProductsController < ApplicationContrroller 4 def index 5 @products = Products.all 6 end 7end 8 9 10# products/index.html.erb 11 12 @products.each do |p| 13 @products.name 14 end 15 16 17

2, コントローラークラスのメソッドはルーティングを通って呼ばれますが、通常のオブジェクト指向での考え方では、indexメソッドを使いたいときは
以下を行うことでindexメソッドを使用できると思います。ただこの流れはどこで行われているのか気になります。それともインスタンス化が行われていないわけないですよね...。

ruby

1p = ProductsController.new 2p.index 3=> @productsを取得できる! 4

日常的に流れで書いている部分もありましたが、気になったので質問させていただきます。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Railsを読み解いたわけではなく、動きから「こうやって居るのだろう」と考えていたことを述べます。

Railsはrubyで動きますから、rubyのきまりごとで動きます。インスタンス変数が他のインスタンス、それもclassの違うインスタンスで参照できるはずがありません。
viewが参照しているのはcontrollerのものではなく、自身のインスタンス変数です。

この先は 「例えばこんな方法があるな」ということで実装とは異なるかもしれません。
controllerがviewのclassからインスタンスを作成するときにnewの引数でインスタンス変数の一覧を渡し、それをつかって viewインスタンスのinitializeがインスタンス変数を作成する

ディスパッチャー(と呼ばれているかどうかはわかりません)が routes.rbで作成されてある一覧とURLを見比べて、どのcontrollerのどのactionにどういうparamsで渡すのかを判断し、
controllerのインスタンスを作り
その actionを呼んでる
まさに
p = ProductsController.new p.index
を行なっている のだと理解しています

投稿2021/08/06 20:41

winterboum

総合スコア23416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問