@user=User.where(:nick=>'test',:email=>'[email protected]').first
if(@user.nil?)
@user=User.new
@user.nick='test'
@user.email='[email protected]'
@user.save
end
这样一执行 save 的话,就会报错,说这条记录已存在。但是我很奇怪,数据库里面确是是没有的。
nick,email 是组合唯一主键
..为啥这样判断啊...我看教程里面有这样的写法,你参考一下
# User.rb
validates :nick, :uniqueness => true
validates :email, :uniqueness => true
这样子前两行就不用了...
而且你也应该多贴一点内容,比如你的 model 是怎么设定的。还有具体的 log 是怎么样的。详见 提问的智慧
我用上面方法还是报同样的错,保存的时候,说用户已存在了,下面是 model 的信息
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,:nick,:session_key
# attr_accessible :title, :body
has_many :trade
end
我刚刚仔细试了下,其实我是 save 进去的了,如果我不用 save! 的话,只是登录的时候,没有登录成功。我在代码后面就是调用 devise 的登录代码,如下:
sign_in_and_redirect user, :event => :authentication, :notice => "登陆成功。"
和这个有关吗?实际上这个好象没有登录成功?
现在确定因该是 devise 有问题,因为我在控制台单纯的保存的时候,他也提示我对象已存在。我把整个表清空了,他还是提示我用户已存在。
1.9.2p290 :004 > user.save
(0.2ms) begin transaction
User Exists (0.2ms) SELECT 1 FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1
(0.1ms) rollback transaction
=> false
有人碰到过这种情况吗?