0

我想在创建对象后获取它的 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

4 回答 4

3

在你create_with_data做你save的对象?在id它被保存之前它是 nil 。

于 2013-03-13T21:12:04.587 回答
2

Rails 函数返回最后评估的语句。如果要编写自己的create_with_data模型方法,则需要返回实际对象。object.save返回其中一个trueor 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
于 2013-03-13T21:32:48.073 回答
1
class Post < ActiveRecord::Base
  ...
  def data=(data)
    # ... use data here
  end
end

Post.create(data: data)

它更干净,它会为你调用 save !您的错误是因为 create_with_data 没有持久化对象(不保存,保存时验证失败等)

于 2013-03-13T21:15:24.157 回答
1

尝试这个:

post = Post.create!({attribute: 'value'})
post_id = post.id

我不确定该方法的create_with_data作用,但它似乎无法保存您的帖子。

于 2013-03-13T21:14:02.817 回答