UsersController中的SyntaxError #create - @ user.save Ruby on Rails

时间:2014-01-13 23:44:37

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我是RoR的新手,我正在尝试自己创建一个正在运行的版本,在完成僵尸课程的轨道后进行实验。我目前正在按照本教程(http://railscasts.com/episodes/250-authentication-from-scratch)尝试从头开始创建一个身份验证系统。我知道它是在rails 3中完成的,所以我有一些乐趣将一些东西改为rails 4友好。

但是,在尝试创建用户时,我收到错误“UsersController #create中的SyntaxError”指向我的UsersController的第8行(如果是@ user.save)

**编辑** /usr/local/rvm/gems/ruby-2.0.0-p353@global/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:377:语法错误,意外' =',期待')'

错误是说期待')',但我有一个'='符号

class UsersController < ApplicationController
  def new
   @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to root_url, :notice => "Signed up!"
    else 
      render "new"
    end 
  end   

  private

  def user_params
    params.require(:user).permit(:username, :email, :password, :salt, :encrypted_password)
  end    
end


class User < ActiveRecord::Base

  attr_accessor :password
  validates_presence_of :password, :on =>create # needed to move line up from below to. Cannot encrypt password without validating password
  before_save :encrypt_password

  validates_confirmation_of :password
  validates_presence_of :email
  validates_uniqueness_of :email

  def encrypt_password
      if password.present?
          self.password_salt = BCrypt::Engine.generate_salt
          self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
      end
  end   
end

1 个答案:

答案 0 :(得分:2)

您确定问题不在您的User模型中吗?这样:

validates_presence_of :password, :on =>create

在语法上是有效的,但它没有任何意义。你有一个create类方法,所以

:on => create
就Ruby而言,

很好但我怀疑validates_presence_of的{​​{1}}选项知道如何处理:on将返回的内容。 User.create内部可能会发生一些事情,试图将validates_presence_of值视为方法名称或类似名称,这种事情很容易从{{1}内部触发您的混乱和奇怪的错误}。一旦开始使用instance_evalmodule_eval和朋友,您的错误消息就会突然停止,Rails会大量使用这些内容。

您的验证应如下所示:

:on

首先解决问题,看看会发生什么。