Devise中的ActiveRecord :: UnknownAttributeError :: RegistrationsController #create unknown attribute:user_id

时间:2014-08-24 03:47:47

标签: ruby devise registration controllers

我在尝试注册帐户时收到上述错误。我正在使用Devise并尝试在一个人注册后添加个人资料。如何修复此错误,以便用户注册并制作个人资料?我还想在个人资料中添加一个头像以及地址,电话号码等其他字段。以下是我的文件:

application_controller.rb

class ApplicationController < ActionController::Base
 # Prevent CSRF attacks by raising an exception.
 # For APIs, you may want to use :null_session instead.
 protect_from_forgery with: :exception
 before_filter :configure_permitted_parameters, if: :devise_controller?

protected

 def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_up) << :name
   devise_parameter_sanitizer.for(:account_update) << :name
 end

  def after_sign_in_path_for(resource)
    profiles_path(resource)
  end

  def after_sign_up_path_for(resource)
    profiles_path(resource)
  end
end

profile.rb

class Profile < ActiveRecord::Base
    belongs_to :user 

end

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable 

  has_many :pins, dependent: :destroy

    validates :name, presence: true

    has_one :profile
  before_create :build_profile #creates profile at user registration
end

的routes.rb

'Rails.application.routes.draw do
  resources :profiles

  resources :pins
  devise_for :users



  #devise_for :installs
  root "pins#index"
  get "about" => "pages#about"

schema.rb

ActiveRecord::Schema.define(version: 20140818034852) do

  create_table "installs", force: true 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.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "installs", ["email"], name: "index_installs_on_email", unique: true
  add_index "installs", ["reset_password_token"], name: "index_installs_on_reset_password_token", unique: true

  create_table "pins", force: true do |t|
    t.string   "description"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
  end

  add_index "pins", ["user_id"], name: "index_pins_on_user_id"

  create_table "profiles", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "user_profiles", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "users", force: true 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.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

end

1 个答案:

答案 0 :(得分:0)

如果您查看schema.rb,它就缺少user_id。所以你需要做的是运行以下

rails g migration add_user_id_to_profile 

这有助于将配置文件模型与用户模型相关联。