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を返しますが、オブジェクト自体は返しません。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
于 2013-03-13T21:32:48.073 に答える
1

これを試して:

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

この方法で何ができるかわかりcreate_with_dataませんが、投稿が保存されていないようです。

于 2013-03-13T21:14:02.817 に答える
1
class Post < ActiveRecord::Base
  ...
  def data=(data)
    # ... use data here
  end
end

Post.create(data: data)

それははるかにきれいであり、それはあなたのために保存を呼び出します!エラーは、create_with_dataがオブジェクトを永続化していないためです(保存されていない、保存時に検証に失敗するなど)。

于 2013-03-13T21:15:24.157 に答える