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

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

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

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

Ruby on Rails

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

命名規則

命名規則は、プログラミングする際に識別子の名称である文字列を決める表記法のことです。ネーミング規則・ネーミング規約・命名規約とも呼びます。

Q&A

解決済

2回答

1705閲覧

rails のクラスの命名規約について

hase744

総合スコア57

Ruby

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

Ruby on Rails

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

命名規則

命名規則は、プログラミングする際に識別子の名称である文字列を決める表記法のことです。ネーミング規則・ネーミング規約・命名規約とも呼びます。

0グッド

0クリップ

投稿2021/12/10 12:20

railsで他ファイルのクラスを扱えるのはどういう時ですか?
railsで他のファイルからクラスを扱うには
require "./app/form/staff/login_form.rb"
のように書く必要がありますが以下の場合だと書く必要がありません
どうしてですか?

/app/form/staff/login_form.rb

ruby

1class Staff::LoginForm 2 include ActiveModel::Model 3 4 attr_accessor :email, :password 5end

ruby

1class Staff::SessionsController < ApplicationController 2 def new 3 @form = Staff::LoginForm.new 4 render action: "new" 5 end 6end

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

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

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

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

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

winterboum

2021/12/10 12:34

require "./app/form/staff/login_form.rb" が必要なのは class LoginForm のときですか?
hase744

2021/12/10 13:03

そうです!
guest

回答2

0

Rails は 未定義の class や module にであうと、それを定義したfileを探し出して自動で取り込んでくれますが、そのためには class,module名とfile path の間に厳密な関係があります。

先頭の大文字は小文字にする
以外の大文字は 小文字にしてその前に下線をつける
:: は / にする
大文字が2つ以上連続したら、、、、、

などです。

ですので、
class Staff::LoginForm が form/staff/login_form.rb で定義してあれば自動で取り込まれますが form/login_form.rb では探してくれません。
class LoginForm でしたらそこで見つけてくれます。

投稿2021/12/10 13:00

winterboum

総合スコア23329

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

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

hase744

2021/12/11 13:00

なるほど、名前空間だったんですね!
guest

0

ベストアンサー

今回の質問は明示的にrequireをしなくてもクラスが使える条件という事でいいでしょうか?
Railsでは、app/任意のディレクトリ/.rbは自動的に読み込んでくれます。
したがって、app/form/
.rbやapp/form//.rbはすでにrequire済みなのでそのまま使えます。

※ちなみに、app/models, app/controllersのようにapp/以下のディレクトリ名は複数形になっているので、app/formよりはapp/formsがおすすめだったりします。
動作には関係ありませんが。

投稿2021/12/10 12:46

mingos

総合スコア4025

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

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

hase744

2021/12/10 14:19 編集

そうだったんですね! あとクラス名をStaff::LoginFormからLoginFormにして @form = LoginForm.newにした途端 ninitialized constant Staff::SessionsController::LoginForm Did you mean? Staff::LoginForm とエラーが出ます Staff::は親フォルダを表してるんですかね? だとしたらForm::Staff::LoginFormではないのは何故ですか? クラス名をForm::Staff::LoginFormにしたら uninitialized constant Staff::SessionsController::Form というエラーが起きます
mingos

2021/12/10 22:45 編集

> Staff::は親フォルダを表してるんですかね? フォルダ名ではありません。 それはRubyの名前空間(namespace)です。 あなたがclass Staff::XXXと書いたからStaffという名前空間が定義されました。 これはRubyの中でのお話でフォルダは関係ないです。 Rubyの中での概念上のフォルダと考えてもいいです(正確ではないですが)。 例えば、app/models/login_form.rbにおいたとして、 その中身が、 class Staff::LoginForm end だったら、自動的にはrequireしてくれません。 しかし、require("./app/models/login_form.rb")と書いてやれば、Staff::LoginFormは認識されます。 でもこれはめちゃくちゃ使いづらい上に効率が悪い。 そこで、Railsでは、名前空間とファイルを配置する場所が一致した場合自動でrequire してくれます。 class Staff::LoginFormなら staff/login_form.rbという事になるので、 app/任意のフォルダ/staff/login_form.rbに置いてあれば自動でrequireしますよということです。 そういう事でしかないので、任意のフォルダはどうでもいいのです。 今回の場合app/formですが、app/formのformは任意のフォルダに相当するので、 クラス名にも名前空間にも関係ありません。 Form::Staff::LoginFormが使いたければ、上のルールに従ってlogin_fom.rbの中を class Form::Staff::LoginForm end と書いて、app/form/form/staff/login_form.rbに配置すればOKです。
hase744

2021/12/11 13:00

名前空間っていうのがあったんですね! 丁寧にありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問