这是我的User_Controller,普通脚手架
class UsersController < ApplicationController
# GET /users
# GET /users.json
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
# GET /users/new
# GET /users/new.json
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
# GET /users/1/edit
def edit
@user = User.find(params[:id])
end
# POST /users
# POST /users.json
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PUT /users/1
# PUT /users/1.json
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :ok }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.json { head :ok }
end
end
end
以下是我正在使用的用户模型(User.rb):
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
attr_accessible :username, :email, :fname, :lname, :password, :password_confirmation
validates :password, :presence => true,
:confirmation => true,
:length => {:within => 6..30}
end
虽然我创建了这个模型,但我忘了用户应该有一个&#34;密码&#34;属性。所以我进行了密码迁移。但从那时起,每当我创建用户时,我都会不断收到此错误:
NoMethodError: undefined method `password' for #<User:0x00000100b11560>
抱歉格式不佳
答案 0 :(得分:2)
将它们标记为属性
class User < ActiveRecord::Base
attr_accessible :password, :password_confirmation
end
更新 11-2015
使用当前导轨,此方法已更改为attr_accessor
。您不必将确认声明为属性,只需confirmation: true
即可。
class User < ActiveRecord::Base
attr_accessor :password
validates :password, presence: true, length: { in: 6..20 }, confirmation: true
end
答案 1 :(得分:1)
确保在users表中有密码列,登录mysql并执行DESC users
您可能错过了迁移,或者您的迁移应该有一些问题