前提・実現したいこと
ruby '2.5.1'
'rails', '~> 5.2.3'
gem devise(devise入れて登録機能周り作っています)
Webアプリケーションの開発中です。
動作確認のためadminを入れて登録管理を行なっていますが、
Userの新規登録ができなくなってしまいました。
エラーの内容は以下です。
ActiveModel::MissingAttributeError at /user/new can't write unknown attribute `image`
エラー位置の指定では以下の表示です
with_value_from_databaseactivemodel (5.2.3) lib/active_model/attribute.rb
def with_value_from_database(value) raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{name}`" end
db/migrate/schema.rb
ActiveRecord::Schema.define(version: 2019_09_07_113657) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "admin_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", null: false t.datetime "updated_at", null: false t.index ["email"], name: "index_admin_users_on_email", unique: true t.index ["reset_password_token"], name: "index_admin_users_on_reset_password_token", unique: true end
models/user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable #has_many :guides, dependent: :destroy has_many :guide_infos, dependent: :destroy has_many :g_infos, dependent: :destroy has_many :messages, dependent: :destroy has_many :entries, dependent: :destroy end
models/admin_user.rb
class AdminUser < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable # attr_accessible :email, :password, :password_confirmation, :remember_me end
models/application_record.rb
class ApplicationRecord < ActiveRecord::Base self.abstract_class = true mount_uploader :image, ImageUploader end
application_controller.rb
```ここに言語を入力 class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :password]) end end
routes.rb
Rails.application.routes.draw do devise_for :users, controllers: { :registrations => 'users/registrations'} devise_scope :user do get "/users/sign_up" => "devise/registrations#new" post 'users' => "devise/registrations#create" get "/users/sign_in" => "devise/sessions#new" get '/users/sign_out' => "devise/sessions#destroy" end resources :users, :only => [:index, :show] root "users#index" resources :messages, :only => [:create] resources :rooms, :only => [:create, :show, :index] get 'users/index' get 'users/show' resources :create_g_infos resources :news resources :questions resources :g_infos mount RailsAdmin::Engine => '/admin', as: 'rails_admin' devise_for :admin_users resources :guides # devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
試したこと>
rails consoleでそもそもDBに直接User
登録を試みましたが、同じ文章のエラーで登録ができませんでした。
[12] pry(main)> new_user.email ='test4@gmail.com' => "test4@gmail.com" [13] pry(main)> new_user.save (0.4ms) BEGIN User Exists (0.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "test4@gmail.com"], ["LIMIT", 1]] (0.4ms) ROLLBACK => false [21] pry(main)> User.create!(id:'1',email:'test1@gmail.com',password:'password') (1.3ms) BEGIN User Exists (1.1ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "test1@gmail.com"], ["LIMIT", 1]] (0.4ms) ROLLBACK ActiveModel::MissingAttributeError: can't write unknown attribute `image` from /Users/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activemodel-5.2.3/lib/active_model/attribute.rb:207:in `with_value_from_database'
’image’モデルをdestroyして見ましたがダメでした。
$ rails destroy model image Running via Spring preloader in process 27334 invoke active_record remove db/migrate/20190907112153_create_images.rb remove app/models/image.rb invoke test_unit remove test/models/image_test.rb remove test/fixtures/images.yml
'image'カラムを追加して見ましたが、ダメでした。
$ rails g migration Add imagetoadmin_users image:string Running via Spring preloader in process 27760 invoke active_record create db/migrate/20190907113657_add.rb MacBook-Air:$ rails db:migrate
補足情報(FW/ツールのバージョンなど)
users schema
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", null: false t.datetime "updated_at", 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 end
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController before_action :configure_sign_up_params, only: [:create] # before_action :configure_account_update_params, only: [:update] # GET /resource/sign_up #def new #end # POST /resource def create if user.save redirect_to new_g_infos_path(id: @user) end end
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー