2016-09-02 2 views
1

Я новичок в RoR. Я слежу за учебным пособием, где мне приходилось генерировать имя пользователя эскиза first_name last_name, а затем перейти к БД. По какой-то причине, когда я попытался нажать на новую ветку в Git, некоторые изменения были потеряны. Тогда я не смог загрузить локальный сервер, получив ошибку, связанную с БД. После долгих часов, пытаясь понять, в чем дело, я сдался и решил уничтожить и перенастроить БД.NoMethodError in Users # index || проблема с базой данных

Я пытался сформировать пользовательские подмости first_name last_name, но консоль дает мне ошибку:

The name 'User' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again. 

Хотя индексная страница выглядит хорошо, и я могу создавать пользователей и войти/выйти нормально, когда я попытаться получить доступ http://localhost:3000/users/, я получаю эту ошибку:

NoMethodError in Users#index 
Showing /Users/Jen/nameofapp/app/views/users/index.html.erb where line #16 raised: 

undefined method `first_name' for # User:0x007febdf5938a0 

это мои фрагменты кода:

просмотров/пользователей/index.html.erb

<p id="notice"><%= notice %></p> 

<h1>Listing Users</h1> 
    <table> 
    <thead> 
     <tr> 
     <th>First name</th> 
     <th>Last name</th> 
     <th colspan="3"></th> 
     </tr> 
    </thead> 

    <tbody> 
     <% @users.each do |user| %> 
     <tr> 
      <td><%= user.first_name %></td> 
      <td><%= user.last_name %></td> 
      <td><%= link_to 'Show', user , class:"btn btn-default btn-xs" %></td> 
      <td><%= link_to ('<span class="glyphicon glyphicon-pencil"></span>').html_safe, edit_user_path(user) %></td> 
      <td><%= link_to ('<span class="glyphicon glyphicon-remove"></span>').html_safe, user, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     </tr> 
     <% end %> 
    </tbody> 
    </table> 
<br> 

<div class="col-sm-6 col-md-4"> 
    <%= link_to 'New User', new_user_path, class:"btn btn-default btn-xs" %> 
</div> 

модели/user.rb

class User < ApplicationRecord 

     devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

     has_many :orders  
    end 

Контроллеры/users_controller.rb

class UsersController < ApplicationController 
    before_filter :authenticate_user!, :except => [:show, :index] 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 
    load_and_authorize_resource 

    # GET /users 
    # GET /users.json 
    def index 
    @users = User.all 
    end 

    # GET /users/1 
    # GET /users/1.json 
    def show 
    end 

    # GET /users/new 
    def new 
    @user = User.new 
    end 

    # GET /users/1/edit 
    def edit 
    end 

    # POST /users 
    # POST /users.json 
    def create 
    @user = User.new(user_params) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render :show, status: :created, location: @user } 
     else 
     format.html { render :new } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /users/1 
    # PATCH/PUT /users/1.json 
    def update 
    respond_to do |format| 
     if @user.update(user_params) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.json 
    def destroy 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:first_name, :last_name) 
    end 
end 
+1

Я думаю, что столбец 'first_name' отсутствует в таблице' users'! – RSB

+0

вы должны использовать пользователя вместо пользователей на маршруте, потому что я думаю, что созданный вами эшафот генерирует ресурс с именем пользователя вместо пользователей. –

+0

в таблице БД? да. Я забыл упомянуть об этом, как я могу добавить first_name и last_name в таблицу users в базе данных сейчас? Я думаю, что это главный вопрос ... – catch22

ответ

1

Вы можете использовать scaffold, если вы уже использовали Devise для User класса. Тем не менее, вы можете создать другой файл миграции, чтобы добавить эти столбцы в таблице users

rails g migration AddFieldsToUser 

Затем внутри миграции

def change 
    add_column :users, :first_name, :string 
    add_column :users, :last_name, :string 
end 

Как вы новичок, им писать эти фрагменты кода.

+0

это то, что я искал, большое спасибо! – catch22

+0

мое удовольствие..хорошее кодирование – Andolasoft