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

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

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

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

Q&A

解決済

1回答

1019閲覧

slimで書いたviewファイルのNoMethodErrorについて

kenya.yasuhara

総合スコア17

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/07/27 07:13

編集2019/07/27 08:39

《質問》
以下のslimファイルの3行目、
= form_with model: [:admin, @user], local: true do |f|
= form_with model: @user, local: true do |f|に変えると処理が通る理由を教えて下さい。

《前提》

  • namespaceにadminを設定している(以下routes.rb参照)
  • users_controller.rbはapp/controllers/admin/users_controllers.rbというようにadmin以下に格納している
  • form_withの文法的に間違っていなさそう(https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502)
  • railsのバージョン:5.2.3

よろしくおねがいします。

views/admin/users/new.slim.html

html

1h1 ユーザー登録 2 3= form_with model: [:admin, @user], local: true do |f| 4 .form-group 5 = f.label :name, '名前' 6 = f.text_field :name, class: 'form-control' 7 .form-group 8 = f.label :email, 'メールアドレス' 9 = f.text_field :email, class: 'form-control' 10 .form-check 11 = f.label :admin, class: 'form-check-label' do 12 = f.check_box :admin, class: 'form-check-input' 13 | 管理者権限 14 .form-group 15 = f.label :password, 'パスワード' 16 = f.password_field :password, class: 'form-control' 17 .form-group 18 = f.label :password_confirmation, 'パスワード(確認)' 19 = f.password_field :password_confirmation, class: 'form-control' 20 = f.submit '登録する', class: 'btn btn-primary'

config/routes.rb

ruby

1Rails.application.routes.draw do 2 namespace :admin do 3 resources :users 4 end 5 root to: 'tasks#index' 6 resources :tasks 7end

app/controllers/admin/users_controller.rb

ruby

1class Admin::UsersController < ApplicationController 2 def new 3 user = User.new 4 end 5 6 def create 7 @user = User.new(user_params) 8 if @user.save 9 redirect_to admin_users_path, notice: "ユーザー「#{@user.name}を登録しました」" 10 else 11 reder :new 12 end 13 end 14 15 def edit 16 end 17 18 def show 19 end 20 21 def index 22 end 23 24 private 25 26 def user_params 27 params.require(:user).permit(:name, :email, :admin, :password, :password_confirmation) 28 end 29end

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

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

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

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

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

winterboum

2019/07/27 12:02

通らなかった時のエラーメッセージはどうなっていましたか
guest

回答1

0

ベストアンサー

rb

1# controller 2class Admin::UsersController < ApplicationController 3 def new 4 user = User.new 5 end 6 ... 7end

slim

1= form_with model: [:admin, @user], local: true do |f| 2 ...

user@userは別の変数です。
そのため@userはどこにも定義されていないためnilを返します。
model:に渡っている値が[:admin, nil]となりエラーに至っていると推測できます。
ちなみに

rb

1= form_with model: @user, local: true do |f|

これはmodel:nilのみが渡る形になります。
この場合、送信先URLがカレントURLとなり、
POSTリクエストを受け付けるものがあれば送信自体は成功します。
ただし、期待する送信先である保証はないです。

投稿2019/07/29 08:19

Mugheart

総合スコア2349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問