在Rails中引用新创建的对象

时间:2013-03-13 21:10:24

标签: 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,因为当多个用户同时尝试创建帖子时,可能会造成数据冲突。

谢谢。

4 个答案:

答案 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返回truefalse,但不返回对象本身。

为了返回对象(从而以指定的方式访问其id),只需将对象本身表示为函数的最后一个语句,并在调用方法时自动返回它。

class Post < ActiveRecord::Base

  def self.create_with_data(data)
    photo = self.new(data)
    photo.save
    photo # returns the photo object
  end

end