Как добавить поле клиент в таблицу пользователей разработки в rails

#ruby #ruby-on-rails-3 #devise #rubygems

Вопрос:

я новичок в роре. Я пытаюсь добавить два столбца в таблицу пользователей, в которой отображается ошибка на html-странице, я не знаю, как я могу исправить эту проблему. Я следую учебнику YouTube, я не знаю, как, но его код написан идеально, а мой код показывает ошибку. Я даже добавляю поля в файл миграции и запускаю миграцию БД, но ничего не меняется

 undefined method `last_name' for #<User id: nil, email: "", created_at: nil, updated_at: nil>
 

контроллер приложений.erb

 class ApplicationController < ActionController::Base
   before_action :configure_permitted_parameters, if: :devise_controller?

   protected

   def configure_permitted_parameters
       devise_parameter_sanitizer.permit(:sign_up, keys: [:role_id, :first_name, :last_name])
   end
end
 

Схема.рб

 create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
 

конец

HTML

   <h2>Sign up</h2>

  <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

  <%= render "devise/shared/error_messages", resource: resource %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>

  <div class="field">
    <%= f.label :last_name %><br />
    <%= f.text_field :last_name %>
  </div>

  <div class="field">
    <%= f.label :first_name %><br />
    <%= f.text_field :first_name %>
  </div>


  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
  <%= f.password_field :password, autocomplete: "new-password" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
 <% end %>
 

Комментарии:

1. Можете ли вы показать свое users определение таблицы в db/schema.rb ? Просто чтобы убедиться, что вы действительно мигрировали. Я подозреваю, что вы неправильно выполнили миграцию

2. я обновляю вопрос

3. Итак, из определения вашей таблицы в schema.rb ясно, что вы неправильно выполнили миграцию. Поле last_name не было добавлено в таблицу пользователей.

4. я запускаю rake db:миграция, но ничего не произошло

5. Вы удалили какие-либо файлы миграции без отката?

Ответ №1:

ваша миграция будет выглядеть примерно так

 class AddLastNameToUser < ActiveRecord::Migration
  def change
    add_column :users, :last_name, :string
    
  end
end
 

как только это произойдет, выполните следующие команды в своем терминале:

 rails db:drop
rails db:create
rails db:migrate
 

это приведет к удалению вашей текущей схемы БД, созданию новой и запуску любых имеющихся у вас миграций. существуют короткие версии для выполнения того же самого, но сначала лучше понять основы

Комментарии:

1. я также хочу добавить имя

2. добавьте это в строку с именем вашей фамилии и повторите команды db:удаление, db:создание, db:перенос. add_column :users, :first_name, :string