2011-01-22 40 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。我想是這樣的:。

@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) 

我認爲這是行不通的(怎麼一回事,因爲庫存不inventory_item以前建成的,當然它沒有什麼是做正確的方式

回答

1

最好?在庫存模型中自動添加項目的方法是在庫存模型中這樣做,在那裏,您可以添加after_create方法,該方法在每次創建庫存時都會運行。這樣,您可以從您的型號,並且不必擔心庫存編號。

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