Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中引用新创建的对象_Ruby On Rails - Fatal编程技术网

Ruby on rails 在Rails中引用新创建的对象

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时,可能会产生数据冲突 谢谢。在您的中使用数据创建

我希望在创建对象后获取其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时,可能会产生数据冲突


谢谢。

在您的
中使用数据创建
是否
保存对象?在保存之前,
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,我假设他的方法将返回新创建(并保存)的对象。谢谢您的回答。这很有帮助。