1

私のコントローラーには、次の一連のコマンドがあります。

SAVE DATA INTO FIRST TABLE

_get ID of inserted item into table from first step_

SAVE DATA INTO SECOND TABLE WITH ID FROM FIRST COMMAND

if FIRST.save && SECOND.save
 do something

そして、データベースにすぐに挿入されるアイテムのIDを取得する方法を考えています...グーグルで検索しようとしましたが、この情報が見つかりません...

ヒントをお寄せいただきありがとうございます

4

3 に答える 3

4
# SAVE DATA INTO FIRST TABLE
first_instance = FirstModel.new( :foo => :bar )
first_save = first_instance.save

# _get ID of inserted item into table from first step_
first_instance_id = first_instance.id

# SAVE DATA INTO SECOND TABLE WITH ID FROM FIRST COMMAND
second_save = SecondModel.new( :first_model_id => first_instance_id ).save

if first_save && second_save
  # do something
end
于 2011-06-06T19:52:31.227 に答える
1

updated_atモデルのフィールドでデータベースを検索していただけませんか?

最新のレコードを取得するには:

@model1 = Model1.order("updated_at DESC").limit(1)

またはさらに良いことに、最初に Model1 を保存すると、次のようになります。

@model1 = model1.save

割り当てるには:

@model2.model1_id = @model1.id

注:実際に特定のレコードの ID を保存したい場合、最後のレコードを見つけることは最善の方法ではありません。

これは、Model1 を挿入した直後、Model2 を呼び出す直前に、別のユーザーによって別のレコードが挿入される可能性があるためです。

2 つを一緒に保存するか、まったく保存しない場合は、トランザクションを調べることができます: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

Model2 について心配する前に、Model1 を単独で保存することに満足している場合は、上記で行ったように変数を割り当てるだけです。

于 2011-06-06T19:51:27.853 に答える
1

idモデルを保存したら、その変数にアクセスできます。

@user = User.new
puts @user.id
# => nil
@user.save
puts @user.id
# => 1
于 2011-06-06T19:52:47.927 に答える