2011-10-19 33 views
0

私は完全なレールの初心者ですので、これが些細な場合は私を許してください。関連付けられているモデルが作成されていません

class Inventory < ActiveRecord::Base 
    belongs_to :trader, :polymorphic => true 
end 

class Store < ActiveRecord::Base 
    has_one :inventory, :as => :trader, :dependent => :destroy 
end 

class TravelingParty < ActiveRecord::Base 

    has_many :travelers, :dependent => :destroy 
    has_one :inventory, :as => :trader, :dependent => :destroy 
    validates_presence_of :speed, :ration, :position 
    accepts_nested_attributes_for :travelers, :reject_if => :reject_traveler, :allow_destroy => true 
    accepts_nested_attributes_for :inventory, :allow_destroy => true 

    def reject_traveler(attributes) 
     attributes['profession'].blank? and attributes['name'].blank? 
    end 

end 

私は、提出されたときに、旅行者や旅行者の数を作成し、フォームを作成しました:

は、私が店や旅行パーティーBELONGS_TOいずれかの在庫モデルを持っています。今私は、インベントリを作成し、すべての変数を0に初期化するフォームをしたいと思います。次の変数の初期化には対処しませんが、インベントリデータベーステーブルにNULL値の行を配置するようにも見えません。良い測定のために

class TravelingPartiesController < ApplicationController 

    def new 
     @traveling_party = TravelingParty.new 
     5.times do 
      traveler = @traveling_party.travelers.build 
     end 
     @inventory = @traveling_party.inventory.create 

    end 

    def create 
     @traveling_party = TravelingParty.new(params[:traveling_party]) 
     if @traveling_party.save 
      flash[:notice] = "Successfully created traveling party and travelers." 
      redirect_to '/store/' 
     else 
      flash[:error] = "Please specify a leader." 
      redirect_to '/new/' 
     end 
    end 

    def index 
    end 

end 

、ここではデータベーススキーマは次のようになります。

ActiveRecord::Schema.define(:version => 20111018224808) do 

    create_table "inventories", :force => true do |t| 
    t.integer "ox" 
    t.integer "food" 
    t.integer "clothing" 
    t.integer "ammunition" 
    t.integer "money" 
    t.integer "axle" 
    t.integer "wheel" 
    t.integer "tongue" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "trader_id" 
    end 

    create_table "stores", :force => true do |t| 
    t.string "name" 
    t.integer "location" 
    t.integer "priceScale" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

# Could not dump table "travelers" because of following StandardError 
# Unknown type 'relations' for column 'traveling_party_id' 

    create_table "traveling_parties", :force => true do |t| 
    t.integer "speed" 
    t.integer "ration" 
    t.integer "position" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

end 

インベントリデータベーステーブルが全く影響されていない理由はありますか?それがうまくいくと、traveling_party.inventoryを初期化してすべて0にする最良の方法は何でしょうか? (すなわち、牛、食物、衣類などの値)。

+0

での移行を作成することができると信じて

を(あなたは、他の選択肢が存在しない場合、それは常に0に初期化する場合はそれ以外の場合はnilにデフォルト設定されます)次のStandardErrorのためにテーブル "旅行者"をダンプしないでください #列 'traveling_party_id''Unknown type' relations ' – Matthew

答えて

0

これは、inventoryテーブルに 'trader_type'が含まれていない可能性があるためです。これは多相関連に必要です。

create_table "inventories", :force => true do |t| 
    t.integer "trader_id" 
    t.string "trader_type" 
    end 

編集:

は、0に最初にすべての値を設定するには最良の方法は、テーブルのフィールドにデフォルト値を入れることであろう。 `#ができます。これは不審に見える私はあなたが

change_table(:inventories) do |t| 
    t.change :ox, :integer, :default => 0 
end 
+0

ありがとう!多形性の代わりにSTIを実装しました – jmaliakal

関連する問題