###前提・実現したいこと
ユーザ登録機能を作り始めたのですが、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
1<p><font color=red><%= flash[:alert] %></font></p> 2<%= form_tag login_path do %> 3<table id="login_form"> 4 <tr> 5 <td><%= label_tag :name, 'UserID' %></td> 6 <td><%= text_field_tag :name, params[:name] %></td> 7 </tr> 8 9 <tr> 10 <td><%= label_tag :pass, 'Password' %></td> 11 <td><%= password_field_tag :pass, params[:pass] %></td> 12 </tr> 13 14 <tr> 15 <td><%= submit_tag "Login" %></td> 16 </tr> 17</table> 18<% end %> 19 20<br><br> 21 22<h3>ユーザ登録</h3> 23 24<%= form_for @user do |f| %> 25 26 <div class="field"> 27 <%= f.label :name, "UserID" %> 28 <%= f.text_field :name %> 29 </div> 30 31 <div class="field"> 32 <%= f.label :pass, "Password" %> 33 <%= f.text_field :pass %> 34 </div> 35 36 <div class="actions"> 37 <%= f.submit "登録する" %> 38 </div> 39<% end %>
logins.controller.rb
ruby
1class LoginsController < ApplicationController 2 def index 3 render "index" 4 end 5 6 def show 7 render "new" 8 end 9 10 def new 11 @users = User.all 12 @user = User.new 13 end 14 15 def create 16 user = User.find_by_name params[:name] 17 if user && user.authenticate(params[:pass]) 18 session[:user_id] = user.id 19 redirect_to root_path 20 else 21 flash.now.alert = "もう一度入力してください。" 22 render "new" 23 end 24 end 25 26 def destroy 27 session[:user_id] = nil 28 @current_user = nil 29 redirect_to root_path 30 end 31end
routes.rb(訂正)
ruby
1Rails.application.routes.draw do 2 get 'questions/index' 3 4 get 'questions/show' 5 6 get 'questions/ajax_method'=>'questions#ajax_method',as:'ajax_method' 7 8 get 'questions/button'=>'questions#button',as:'button' 9 10 root 'logins#index' 11 resource :login, only: %i{show create destroy} 12 13 #rake routes 14 15 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 16end
###試したこと
newアクションで@userを作成しているのですがnilといわれてしまいます。
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.0.0.1
###追記
マイグレーションファイル(20170110165330_create_users.rb)
ruby
1class CreateUsers < ActiveRecord::Migration[5.0] 2 def change 3 create_table :users do |t| 4 5 t.boolean :exist,default: false 6 7 t.integer :number 8 9 t.string :name 10 t.string :password_digest 11 12 t.float :theta,default: 0.0 13 14 t.timestamps 15 end 16 end 17end
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
1ActiveRecord::Schema.define(version: 20170110165330) do 2 3 create_table "questions", force: :cascade do |t| 4 t.integer "qid" 5 t.string "field" 6 t.text "question" 7 t.string "answer" 8 t.string "dummy1" 9 t.string "dummy2" 10 t.string "dummy3" 11 t.string "dummy4" 12 t.string "dummy5" 13 t.text "note" 14 t.float "b" 15 t.integer "user1", default: 0 16 t.integer "user2", default: 0 17 t.integer "user3", default: 0 18 t.integer "user4", default: 0 19 t.integer "user5", default: 0 20 t.integer "user6", default: 0 21 t.integer "user7", default: 0 22 t.integer "user8", default: 0 23 t.integer "user9", default: 0 24 t.integer "user10", default: 0 25 t.datetime "created_at", null: false 26 t.datetime "updated_at", null: false 27 end 28 29 create_table "users", force: :cascade do |t| 30 t.boolean "exist", default: false 31 t.integer "number" 32 t.string "name" 33 t.string "password_digest" 34 t.float "theta", default: 0.0 35 t.datetime "created_at", null: false 36 t.datetime "updated_at", null: false 37 end 38 39end
user.rb
ruby
1class User < ApplicationRecord 2 has_secure_password 3end
回答2件
あなたの回答
tips
プレビュー