Rails 关于 activerecord 的写法,下面有错吗?

cdredfox · 2012年04月29日 · 最后由 cdredfox 回复于 2012年04月29日 · 3493 次阅读
@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 是怎么样的。详见 提问的智慧

User.find_or_create_by_nick_name_and_email("test","[email protected]")

我用上面方法还是报同样的错,保存的时候,说用户已存在了,下面是 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

#3 楼 @cdredfox 亲..你不花时间看看发帖的格式..让大家看的更轻松点.....怎么能让别人来帮你搞定你的问题呢......

你的代码挤成一团。还没有高亮...

抱歉,重新编辑了一下~

楼主这段代码的目的是想做什么?创建初始化数据吗,为啥不用 seed

是这样的,类似三方授权的时候,如果用户已经存在,则就直接置为已登录状态,如果没有则创建一个新的用户,也将他置为登登录

可以使用 rails 中方法 first_or_create,具体的可以查询 api

但我实在看不出?为什么 这段代码会报错,报错的信息是说对象已存在

#9 楼 @cdredfox 给 log 看看吧.....或者自己用 pry debug.. 看看 screencast 就能明白基本用法了.. 可以用 bingding.pry 制造断点。在 rails server 的界面里进行调试

嗯..最后问题解决的时候再张贴下问题的原因和解决的办法....有始有终嘛

一行一行的 p 出来看看吧

我刚刚仔细试了下,其实我是 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 



有人碰到过这种情况吗?

这个问题解决了,是我对 devise 的使用不熟悉,必须要传 password,password_confirmation 才行

cdredfox devise 生成的 model 是否不能手工创建? 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号