###前提・実現したいこと
ユーザ登録機能を作り始めたのですが、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
まだ回答がついていません
会員登録して回答してみよう