我是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
答案 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_eval
,module_eval
和朋友,您的错误消息就会突然停止,Rails会大量使用这些内容。
您的验证应如下所示:
:on
首先解决问题,看看会发生什么。