NoMethodError:未定义的方法“密码”创建用户时

发布于 2024-12-11 11:31:26 字数 2455 浏览 2 评论 0原文

这是我的 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

当我创建这个模型时,我忘记了用户应该有一个“密码”属性。所以我对密码进行了迁移。但从那时起,每当我创建用户时,我都会收到此错误:

NoMethodError: undefined method `password' for #<User:0x00000100b11560>

对于格式不佳感到抱歉

This is my User_Controller, normal scaffold

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

Here is the User model(User.rb) that im working on:

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

While I created this model, I forgot that user should have a "password" attribute. So I made a migration for password. But ever since then I keep getting this error whenever I create a user:

NoMethodError: undefined method `password' for #<User:0x00000100b11560>

sorry for the poor formatting

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

翻身的咸鱼 2024-12-18 11:31:26

将它们标记为属性

class User < ActiveRecord::Base
  attr_accessible :password, :password_confirmation
end

更新 11-2015

在当前的 Rails 中,此方法已更改为 attr_accessor。您不必将确认声明为属性,只需 confirmation: true 就足够了。

class User < ActiveRecord::Base
  attr_accessor :password

  validates :password, presence: true, length: { in: 6..20 }, confirmation: true
end

Mark them as attributes

class User < ActiveRecord::Base
  attr_accessible :password, :password_confirmation
end

UPDATE 11-2015

With current rails this method has changed to attr_accessor. You shouldn't have to declare the confirmation as an attribute, just the confirmation: true should suffice.

class User < ActiveRecord::Base
  attr_accessor :password

  validates :password, presence: true, length: { in: 6..20 }, confirmation: true
end
ゞ记忆︶ㄣ 2024-12-18 11:31:26

确保用户表中有密码列,登录 mysql 并执行 DESC users

要么您可能错过了运行迁移,要么您的迁移应该有一些问题

Make sure that you have the password column in users table, login to mysql and do DESC users

Either you might have missed to run migration or your migration should have some problem

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文