我希望在创建对象后获取对象的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
,因为当多个用户同时尝试创建帖子时,可能会造成数据冲突。
谢谢。
答案 0 :(得分:3)
在你的create_with_data
save
对象中? id
为零,直到保存为止。
答案 1 :(得分:1)
试试这个:
post = Post.create!({attribute: 'value'})
post_id = post.id
我不确定create_with_data
方法的作用,但似乎没有保存您的帖子。
答案 2 :(得分:1)
class Post < ActiveRecord::Base
...
def data=(data)
# ... use data here
end
end
Post.create(data: data)
它更干净,它会为你打电话保存!您的错误是因为create_with_data没有持久化对象(不保存,保存时验证失败等)
答案 3 :(得分:1)
Rails函数返回最后一个计算语句。如果您要编写自己的create_with_data
模型方法,则需要返回实际对象。 object.save
返回true
或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