我想在创建对象后获取它的 id,如下所示:
post = Post.create_with_data(data)
post_id = post.id #id of the post object just created in previous line
但是, post_id 是nil
. 我如何实现我的目标?我不想使用Post.last
,因为当多个用户同时尝试创建帖子时,它可能会产生数据冲突。
谢谢你。
我想在创建对象后获取它的 id,如下所示:
post = Post.create_with_data(data)
post_id = post.id #id of the post object just created in previous line
但是, post_id 是nil
. 我如何实现我的目标?我不想使用Post.last
,因为当多个用户同时尝试创建帖子时,它可能会产生数据冲突。
谢谢你。
在你create_with_data
做你save
的对象?在id
它被保存之前它是 nil 。
Rails 函数返回最后评估的语句。如果要编写自己的create_with_data
模型方法,则需要返回实际对象。object.save
返回其中一个true
or false
,但不返回对象本身。
为了返回对象(并因此以指定的方式访问其 id),只需将对象本身表示为函数的最后一条语句,当您调用该方法时它将自动返回。
class Post < ActiveRecord::Base
def self.create_with_data(data)
photo = self.new(data)
photo.save
photo # returns the photo object
end
end
class Post < ActiveRecord::Base
...
def data=(data)
# ... use data here
end
end
Post.create(data: data)
它更干净,它会为你调用 save !您的错误是因为 create_with_data 没有持久化对象(不保存,保存时验证失败等)
尝试这个:
post = Post.create!({attribute: 'value'})
post_id = post.id
我不确定该方法的create_with_data
作用,但它似乎无法保存您的帖子。