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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1632閲覧

Railsで定数が「初期化されていません。」のようなエラーが出るのですが解決方法を教えてください。

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/01/11 15:59

Rails5.1.3でWebアプリケーションの勉強をしながら、実際に公開することを目指して制作しています。
editアクションを呼び出そうとしたときのエラーのようですが、ネットで調べると名前の指定が違います。というような
対応がありました。自分のコードを見直しても間違いを見つけれないので、解決できずに困っています。
エラー内容と、関連するコードは以下になります。

NameError in Staff::RegistersController#edit uninitialized constant Staff::RegisterForm Extracted source (around line #8): 7 def edit 8 @register_form = Staff::RegisterForm.new(Register.find(params[:id]))-----ここでエラーが発生。 9 @customer = Customer.find_by(id: current_customer.id) 10 @acc_name = @customer.family_name + ' ' + @customer.given_name 11 @acc_name_kana = @customer.family_name_kana + ' ' + @customer.given_name_kana
customers/index.html.erb <%= link_to '詳細', [ :staff, c ] %> | <%= link_to '編集', [ :edit, :staff, c ] %> | <%= link_to '確認', edit_staff_register_path(c) %> | <%= link_to '削除', [ :staff, c ], method: :delete, data: { confirm: '本当に削除しますか?' } %>
register_controller.rb class Staff::RegistersController < Staff::Base def show @register = current_customer @register = Register.find_by(customer_id: current_customer.id) end def edit @register_form = Staff::RegisterForm.new(Register.find(params[:id]))-----ここでエラー発生 @customer = Customer.find_by(id: current_customer.id) @acc_name = @customer.family_name + ' ' + @customer.given_name @acc_name_kana = @customer.family_name_kana + ' ' + @customer.given_name_kana end
app/forms/customer/register_form.rb class Staff::RegisterForm include ActiveModel::Model attr_accessor :register delegate :persisted?, :save, to: :register def initialize(register = nil) @register = register @register ||= Register.new end def assign_attributes(params = {}) @params = params register.assign_attributes(register_params) end private def register_params @params.require(:register).permit(:rg_1, :rg_2, :rg_3, :rg_4, :rg_5, :rg_6, :rg_7, :rg_8, :rg_9, :rg_10, :rg_11, :rg_12) end end

もしかして、customerコントローラのindexアクションからregisterコントローラのeditアクションに
アクセスしたのが間違いの原因なのでしょうか?
どなたか教えていただけないでしょうか?宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイル名をクラス名・モジュール名に合わせないといけないのですが,ファイル名は RegisterForm に対して register_form.rb なので合っていますね。
ただ,Staff::RegisterForm の形なので,一つ上のディレクトリー名は staff にしなければならないのではないか,と思います。

それと,ファイルを追加したときは Rails サーバーを再起動しないと見つけてくれなかったりします。

投稿2018/01/11 16:50

scivola

総合スコア2108

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

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

koume

2018/01/11 16:58

回答ありがとうございます。勉強不足でよくわからないのですが、 一つ上のディレクトリー名は staff にしなければならないのではないか,と思います。とはどういう意味なのでしょうか?教えていただけませんか? それと、customerコントローラのindexアクションからregisterコントローラのeditアクションにアクセスは出来るのでしょうか? 申し訳ございませんが宜しくお願いします。
scivola

2018/01/11 17:31

app/forms/staff/register_form.rb ってパスにしないといけないんでは?という意味です。 「customerコントローラのindexアクションからregisterコントローラのeditアクションにアクセス」はどういう意味ですか。アクションからアクションにアクセスするというのがどういうことを指しているのかわかりません。
koume

2018/01/12 00:46

回答ありがとうございます。ご指摘の通り、ファイルの作成場所が違っていました。おかげさまで1つ先に進むことができます。今後とも宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問