一个新创建的对象我想获得一个对象的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
,因为它可能会在多个用户同时尝试创建帖子时创建数据冲突。
谢谢。
一个新创建的对象我想获得一个对象的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
,因为它可能会在多个用户同时尝试创建帖子时创建数据冲突。
谢谢。
在你create_with_data
你save
对象?在保存之前,id
为零。
试试这个:
post = Post.create!({attribute: 'value'})
post_id = post.id
我不知道create_with_data
做的方法,但它似乎什么不保存您的文章。
class Post < ActiveRecord::Base
...
def data=(data)
# ... use data here
end
end
Post.create(data: data)
它更清洁,它会为您保存!你的错误是因为create_with_data不是持久的对象(而不是节约,省时无法进行验证等)
Rails的函数返回最后评估声明。如果您要编写自己的create_with_data
模型方法,则需要返回实际对象。 object.save
用在回报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
感谢您的回答。这非常有帮助。 – AdamNYC 2013-03-13 21:38:25
是的,我做保存对象。我会仔细研究一下,看看为什么我没有找回id。 – AdamNYC 2013-03-13 21:14:32
您是否在检查以确保保存有效?如果'save'不返回'true',id将为零。 – 2013-03-13 21:15:33
谢谢理查德。事实证明,我的'create_with_data'只创建但不保存对象。 – AdamNYC 2013-03-13 21:27:33