2017-03-19 38 views
0

我想在Rails中創建一個登錄系統,但是當我進入註冊頁面時,出現錯誤:「未定義的方法`first_name'for#」。我檢查了我的用戶數據庫中的「first_name」列,發現「users」表中唯一的列是「id」,「created_at」和「updated_at」。我創建我的應用程序使用rails new appname -d mysql,我有mysql2 gem,我更新了我的databases.yml文件,並且運行了「rake db:migrate」。但是,沒有任何工作。我怎樣才能解決這個問題?這是我的用戶控制器:Rails遷移文件不向Mysql數據庫添加列

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 
    def create 
    @user = User.new(user_params) 
    if @user.save 
    session[:user_id] = @user.id 
    redirect_to '/login' 
    else 
    redirect_to '/signup' 
    end 
end 
    private 
    def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password) 
    end 
end 

這裏是我的路由器:

Rails.application.routes.draw do 
    root 'main#index' 
    get '/login' => 'sessions#new' 
    get '/signup' => 'users#new' 
    resources :users 
    post 'login' => 'sessions#create' 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
end 

這裏是我的模型:

class User < ApplicationRecord 
     has_secure_password 
    end 

這裏是我的移民文件:

class CreateUsers < ActiveRecord::Migration[5.0] 
    def change 
    create_table :users do |t| 
     t.string :first_name 
     t.string :last_name 
     t.string :email 
     t.string :password_digest 

     t.timestamps 
    end 
    end 
end 

這是我的看法:

<div class="login"> 
    <div class="container"> 
    <div class="form"> 

    <h1>Sign up</h1> 

    <%= form_for(@user) do |f| %> 
     <%= f.text_field :first_name, :placeholder => "First name" %> 
     <%= f.text_field :last_name, :placeholder => "Last name" %> 
     <%= f.email_field :email, :placeholder => "Email" %> 
     <%= f.password_field :password, :placeholder => "Password" %> 
     <%= f.submit "Create an account", class: "btn-submit" %> 
    <% end %> 


    </div> 
    </div> 
</div> 

我用Rails 5.0.2在Ubuntu 16.04

+0

你可以嘗試重新遷移(db:migrate:redo)最後一次遷移 –

+1

我試過了,它工作。謝謝! –

回答

0

你可能要嘗試重新與數據庫遷移:遷移:重做,如果不工作,創建一個新的遷移將各列。

class CreateUsers < ActiveRecord::Migration[5.0] 
    def change 
     add_column :products, :part_number, :string 
     add_column :products, :price, :decimal 
    end 
    end