2013-03-13 73 views
0

一个新创建的对象我想获得一个对象的ID创建后,像这样:参考Rails中

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,因为它可能会在多个用户同时尝试创建帖子时创建数据冲突。

谢谢。

回答

3

在你create_with_datasave对象?在保存之前,id为零。

+0

是的,我做保存对象。我会仔细研究一下,看看为什么我没有找回id。 – AdamNYC 2013-03-13 21:14:32

+0

您是否在检查以确保保存有效?如果'save'不返回'true',id将为零。 – 2013-03-13 21:15:33

+0

谢谢理查德。事实证明,我的'create_with_data'只创建但不保存对象。 – AdamNYC 2013-03-13 21:27:33

1

试试这个:

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

我不知道create_with_data做的方法,但它似乎什么不保存您的文章。

1
class Post < ActiveRecord::Base 
    ... 
    def data=(data) 
    # ... use data here 
    end 
end 

Post.create(data: data) 

它更清洁,它会为您保存!你的错误是因为create_with_data不是持久的对象(而不是节约,省时无法进行验证等)

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 
+0

感谢您的回答。这非常有帮助。 – AdamNYC 2013-03-13 21:38:25