如何解决检查对象是在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 举报,一经查实,本站将立刻删除。