Ruby on rails 在Rails中引用新创建的对象
我希望在创建对象后获取其id,如下所示:Ruby on rails 在Rails中引用新创建的对象,ruby-on-rails,Ruby On Rails,我希望在创建对象后获取其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,因为当多个用户试图同时创建Post时,可能会产生数据冲突 谢谢。在您的中使用数据创建
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
,因为当多个用户试图同时创建Post时,可能会产生数据冲突
谢谢。在您的
中使用数据创建
是否保存对象?在保存之前,id
为零。请尝试以下操作:
post = Post.create!({attribute: 'value'})
post_id = post.id
我不确定使用数据创建的方法是什么,但它似乎无法保存您的帖子。class postclass Post < ActiveRecord::Base
...
def data=(data)
# ... use data here
end
end
Post.create(data: data)
...
def数据=(数据)
# ... 在这里使用数据
终止
终止
创建(数据:数据)
它干净多了,它会为你省钱的!您的错误是因为create_with_data未持久化对象(未保存、保存时验证失败等)。Rails函数返回最后计算的语句。如果要编写自己的
create\u with_data
model方法,则需要返回实际对象<代码>对象。保存,返回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
class Post
是,我确实保存了对象。我会查一查,看看为什么我不能取回id。你是否正在检查以确保保存有效?如果save
未返回true
id将为零。谢谢Richard。原来我的create\u with_data
只创建但不保存对象。@RichardBrown,虽然保存确实会将新对象提交到数据库,但它(本身)不会从函数返回新对象。为了使问题中引用的代码正常工作,对象保存后必须返回。@zeantsoi true,我假设他的方法将返回新创建(并保存)的对象。谢谢您的回答。这很有帮助。