質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

4543閲覧

ActiveModel::MissingAttributeError at /user/new can't write unknown attribute `image`DBへの登録ができなくなった。

lucky_luci

総合スコア18

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/09/08 01:03

編集2022/01/12 10:55

前提・実現したいこと

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

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2019/09/08 02:33

1)そのエラーメッセージの1〜数ステップ前にあなたが書いたプログラムの行が書いてあるのがあるかと。そこがエラー発生箇所ですので、そこのメッセージとプログラムのその部分を。 2)登録できなくなったのは UserですかAdminUserですか?両方の名前がでてきて混乱しています。質問を整理して下さい。 UserでしたらUserのschemaを 何れにしても create methdを
lucky_luci

2019/09/08 02:54

説明足らずで申し訳ありません。admin userの登録ができないと発覚する前に、多くのプログラムの変更をしているので、ターミナルの(git上でも)履歴が追えない状況です。rails cで試した結果、恐らく同じ原因でuserもadmin userも登録ができません。userのschemaと、(deviseを使っているので)registrations_controllerに記述したcreateを追記します。
siruku6

2019/09/21 15:48

error発生時は、エラーが発生したファイル名と行数、付近のコードが表示されるかと思います。 それを記載しないと解決策は出せないかと思います。 まだ掲載していないファイルであった場合は、該当ファイルの該当メソッドも掲載する必要があるでしょう。 また、 winterboumさんが >Userのschemaを と仰っているようにこれも必要になります。 それとは別に気になったのは、 models/application_record.rb にある >mount_uploader :image, ImageUploader この記述です。 こんなファイルにuploaderが書かれているのは初めて見たのですが、ご自身で追記されたのでしょうか? ここから予想されるのですが、恐らくcarieerwaveか何かファイルアップロード系のgemを使用していると思いますので、そのgem名と用途も質問内に記載しておきましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問