konchanxxx / menta

MENTAのタスク管理用リポジトリ
0 stars 0 forks source link

Name Errorが発生します #47

Closed RYUTAONO0929 closed 5 years ago

RYUTAONO0929 commented 5 years ago

概要

現場Rails p157のように完成したユーザー登録画面を表示させようと

http://localhost:3000/admin/users/new

にアクセスしようとするのですがNameErrorが発生します。 エラー文によると、ローカル変数もしくはメソッドf ←(何の関数か分かりません)が定義されていないようです。 パーミッションは大丈夫そうなのでそのエラーではないと思います。

実現したいこと

このName Errorの意味を解読し、ログイン画面を表示させ、今後このようなエラーが発生した場合に対処できるようになりたいです。

困っていること

エラー文を解読出来ず困っています。 タイポではないと思います。

困っていることがバグの場合は事象やログ、エラーメッセージをできるだけそのまま(抜粋などしない)下記に記載してください。

エラー文です。

NameError in Admin::Users#new Showing /home/ryutaono/taskleaf/app/views/admin/users/new.html.slim where line #12 raised:

undefined local variable or method `f' for #<#:0x00007fffd0d69e58>

10 11 12 13 14 15 .form-group = f.label :email, 'メールアドレス' = f.text_field :email, class: 'form-control' .form-check = f.label :admin, class: 'form-check-label' do

スクショです。 11

直前で操作したファイルです。 users_controller.rb

class Admin::UsersController < ApplicationController
  def new
    @user = User.new
  end
  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to admin_users_path, notice: 'ユーザー「#{@user.name}」を登録しました。'
    else
      render :new
    end
  end

  def edit
  end

  def show
  end

  def index
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :admin, :password, :password_confirmation )
  end
end

new.htm.slim

h1 Admin::Users#new
p Find me in app/views/admin/users/new.html.slim

h1 ユーザー登録

= form_with model: [:admin, @user], local: true do |f|
   .form-group
   = f.label :name, '名前'
   = f.text_field :name, class: 'form-control'

.form-group
  = f.label :email, 'メールアドレス'
  = f.text_field :email, class: 'form-control'
.form-check
  = f.label :admin, class: 'form-check-label' do
    = f.check_box :admin, class: 'form-check-input'
  | 管理者権限
.form-group
  = f.label :password, 'パスワード'
  = f.password_field :password, class: 'form-control'
.form-group
  = f.label :password_confirmation, 'パスワード(確認)'
  = f.password_field :password_confirmation, class: 'form-control'
= f.submit '登録する', class: 'btn btn-primary'

解決するために行ったこと

インデントの問題かと思いいくつかのインデントを修正しました。

問題となっている箇所の予想

method f なのか?という感じです。

問題となっているアプリケーションのGitHub URL

konchanxxx commented 5 years ago

fform_with model: [:admin, @user], local: true do |f||f| ですねブロック変数というやつです

https://qiita.com/NA070/items/3bbef4015c4390182915

メソッドを呼び出すときにレシーバとして機能しています。

https://qiita.com/you8/items/e5f5c27cfed60a23fa75

slimのコードですがインデントおかしくないですか?書籍のものと異なるようですslimはコードブロックをインデントで管理しているのでインデントがずれるとスコープ外になりエラーになると思います:bow:

= form_with model: [:admin, @user], local: true do |f|
  .form-group
    = f.label :name, '名前'
    = f.text_field :name, class: 'form-control'
  .form-group
    = f.label :email, 'メールアドレス'
    = f.text_field :email, class: 'form-control'
  .form-check
    = f.label :admin, class: 'form-check-label' do
      = f.check_box :admin, class: 'form-check-input'
    | 管理者権限
  .form-group
    = f.label :password, 'パスワード'
    = f.password_field :password, class: 'form-control'
  .form-group
    = f.label :password_confirmation, 'パスワード(確認)'
    = f.password_field :password_confirmation, class: 'form-control'
  = f.submit '登録する', class: 'btn btn-primary'

slimとは? https://qiita.com/mom0tomo/items/999f806d083569529f81

スコープとは? http://sekai.hateblo.jp/entry/2013/10/29/184609

konchanxxx commented 5 years ago

@RYUTAONO0929 確認お願いします:bow:

RYUTAONO0929 commented 5 years ago

解決しました!! 同じミスをしないために、atomでインデントを表示できるパッケージをインストールしました。 回答ありがとうございました。

konchanxxx commented 5 years ago

解決しました!! 同じミスをしないために、atomでインデントを表示できるパッケージをインストールしました。 回答ありがとうございました。

おお、良かったです!:smile: 再発防止策を実施することは重要なことなのでナイスですね:smile: