微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查对象是在Ruby on Rails中是新创建的还是从数据库中检索的

如何解决检查对象是在Ruby on Rails中是新创建的还是从数据库中检索的

|| 我正在使用Ruby on Rails,并且有一个find_or_create_by_custom_stuff方法。但是我想知道是否找到或创建了我回来的对象。像这样
user = User.find_or_create_by_custom_stuff(params[:user])
if user.was_found_from_database?
  ...
elsif user.was_recently_created?
  ...
end
有什么办法可以不依赖用户的created_at时间戳来做到这一点?     

解决方法

        我会尽量不要使用find_or_create *方法。原因是几乎总是发现者模式与创造者模式不同。 另一种方法可能是:
user = User.custom_finder(params)
if user.blank?
   user = User.create(params)
   #some business logic goes here
else
   #other business logic goes here
end
也可以将其实现到用户模型中以实现更好的结构     ,        你有ActiveRecord方法
@instance.new_record?
为了你
user = User.find_or_create(params[:user])
user.new_record?
注意 :
.new_record? => NOT RECORDED IN DATABASE 
    ,        
user = User.find_or_create_by_custom_stuff(params[:user])
if user.new_record?
  # record does not exist in datastore
else
  ...
end
    ,        您可以尝试find_or_initialize_by,然后执行new_record吗?校验。要记住的一件事是,可以在有机会保存新记录之前创建用户。您在find_or_create_by中也遇到同样的问题,但这可能会为发生此类情况提供更大的窗口。
user = User.find_or_initialize_by(email: params[:email])
if user.new_record?
  if user.save
    render json: user,status: :created
  else
    render json: { errors: @like.errors },status: :unprocessable_entity
  end
else
  render json: user
end
    ,        
user_total = User.count
user = User.find_or_create_by_custom_stuff(params[:user])
if user_total == User.count
 #No new user was created,find method was used.
 ...
else
 #New user created,create method was used.
 ...
end
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?