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

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

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

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

解決済

Railsのform_forで"First argument in form cannot contain nil or be empty"

mogemoge
mogemoge

総合スコア12

Ruby on Rails

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

2回答

0評価

2クリップ

16633閲覧

投稿2017/01/27 10:31

編集2017/01/29 11:36

###前提・実現したいこと
ユーザ登録機能を作り始めたのですが、form_forでエラーが出てしまいます。

###発生している問題・エラーメッセージ

ActionView::Template::Error (First argument in form cannot contain nil or be empty): 23: 24: <h3>ユーザ登録</h3> 25: 26: <%= form_for @user do |f| %> 27: 28: <div class="field"> 29: <%= f.label :name, "UserID" %>

###該当のソースコード
new.html.erb

html

<p><font color=red><%= flash[:alert] %></font></p> <%= form_tag login_path do %> <table id="login_form"> <tr> <td><%= label_tag :name, 'UserID' %></td> <td><%= text_field_tag :name, params[:name] %></td> </tr> <tr> <td><%= label_tag :pass, 'Password' %></td> <td><%= password_field_tag :pass, params[:pass] %></td> </tr> <tr> <td><%= submit_tag "Login" %></td> </tr> </table> <% end %> <br><br> <h3>ユーザ登録</h3> <%= form_for @user do |f| %> <div class="field"> <%= f.label :name, "UserID" %> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :pass, "Password" %> <%= f.text_field :pass %> </div> <div class="actions"> <%= f.submit "登録する" %> </div> <% end %>

logins.controller.rb

ruby

class LoginsController < ApplicationController def index render "index" end def show render "new" end def new @users = User.all @user = User.new end def create user = User.find_by_name params[:name] if user && user.authenticate(params[:pass]) session[:user_id] = user.id redirect_to root_path else flash.now.alert = "もう一度入力してください。" render "new" end end def destroy session[:user_id] = nil @current_user = nil redirect_to root_path end end

routes.rb(訂正)

ruby

Rails.application.routes.draw do get 'questions/index' get 'questions/show' get 'questions/ajax_method'=>'questions#ajax_method',as:'ajax_method' get 'questions/button'=>'questions#button',as:'button' root 'logins#index' resource :login, only: %i{show create destroy} #rake routes # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

###試したこと
newアクションで@userを作成しているのですがnilといわれてしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.0.0.1

###追記
マイグレーションファイル(20170110165330_create_users.rb)

ruby

class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| t.boolean :exist,default: false t.integer :number t.string :name t.string :password_digest t.float :theta,default: 0.0 t.timestamps end end end

bundle exec rake routes実行結果

Prefix Verb URI Pattern Controller#Action questions_index GET /questions/index(.:format) questions#index questions_show GET /questions/show(.:format) questions#show ajax_method GET /questions/ajax_method(.:format) questions#ajax_method button GET /questions/button(.:format) questions#button root GET / logins#index login POST /login(.:format) logins#create GET /login(.:format) logins#show DELETE /login(.:format) logins#destroy

routes.rbを訂正しました。

schema.rb

ruby

ActiveRecord::Schema.define(version: 20170110165330) do create_table "questions", force: :cascade do |t| t.integer "qid" t.string "field" t.text "question" t.string "answer" t.string "dummy1" t.string "dummy2" t.string "dummy3" t.string "dummy4" t.string "dummy5" t.text "note" t.float "b" t.integer "user1", default: 0 t.integer "user2", default: 0 t.integer "user3", default: 0 t.integer "user4", default: 0 t.integer "user5", default: 0 t.integer "user6", default: 0 t.integer "user7", default: 0 t.integer "user8", default: 0 t.integer "user9", default: 0 t.integer "user10", default: 0 t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| t.boolean "exist", default: false t.integer "number" t.string "name" t.string "password_digest" t.float "theta", default: 0.0 t.datetime "created_at", null: false t.datetime "updated_at", null: false end end

user.rb

ruby

class User < ApplicationRecord has_secure_password end

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

satoshih

2017/01/29 05:42 編集

bundle exec rake routes を実行した結果も記載していただけますか? (#newがroutesに設定されているか見てみたいです。
satoshih

2017/01/29 05:53

追記ありがとうございます。やっぱり#newがないですね。。。エラーが出てるのはcontrollerのどのmethodを通ったときかわかりますか?logに出てると思います
mogemoge

2017/01/29 06:12

app/controllers/logins_controller.rb:7:in `show'とあります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

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