2011-01-22 8 views
1

は、私はこのコードを持っている:ビルドでauto_incrementの値を取得しますか?私のユーザ登録ルーチンで

@user = User.new(attribs) 

@user.build_inventory(:max_slots => 10) # create the user inventory, starting with 10 slots 

success = @user && @user.save 
if success && @user.errors.empty? 

これは在庫とその目録にバインドされたユーザーを作成して素晴らしい作品。しかし、今、私はすべての登録で新しいinventory_itemを追加したいと思います。 。私はそれを行うための正しい方法は何ですかインベントリがinventory_item前に内蔵されていませんbeacuseそれは(動作しないでしょう、そしてもちろん、それはなかったと思っ

@user = User.new(attribs) 

inventory = @user.build_inventory(:max_slots => 10) # create the user inventory, starting with 10 slots 
InventoryItem.create(:inventory_id => inventory.id, :game_item => GameItem.find_by_name('Fist'), :is_equipped => 1) 

答えて

1

に最高のを:私のようなものを試してみました?インベントリにアイテムを自動的に追加する方法は、インベントリモデルで行うことです。そこには、インベントリが作成されるたびに実行されるafter_createメソッドを追加することができます。モデルであり、在庫IDについて心配する必要はありません。

class Inventory < ActiveRecord::Base 
    # other associations 
    has_many :inventory_items 

    after_create :create_starting_items 

    protected 
    def create_starting_items 
     inventory_items.create do |item| 
     item.game_item = GameItem.find_by_name('Fist') 
     item.is_equipped = true # This should likely be a boolean 
     end 
    end 
end 

この機能をユーザーモデルに拡張し、after_createとしてインベントリを作成することもできます。これにより、コントローラはユーザーを作成し、関連するインベントリとアイテムをモデルで管理することができます。

+0

右上に!ありがとう! – Spyros

関連する問題