2011-10-19 6 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 값의 행을 넣을 것처럼 보이지 않습니다. . 인벤토리 데이터베이스 테이블은 전혀 영향을받지되지 않는 이유가

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 

: 좋은 측정을 위해

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 

, 여기에 데이터베이스 스키마의 모습인가? 그리고 그것이 작동하면, 모든 0을 갖기 위해 traveling_party.inventory를 초기화하는 가장 좋은 방법은 무엇입니까? (즉, 황소, 음식, 의류 등에 대한 값).

+0

로 마이그레이션을 만들 수 있다고 생각

을 (당신은, 다른 옵션이없는 경우 항상 0으로 초기화 할 경우 그렇지 않은 경우는 전무로 설정됩니다) 다음과 같은 이유로 StandardError 테이블을 덤프하지 않음 # 'travel_party_id "열에 대해 알 수없는'relations '유형이 있습니다. – Matthew

답변

0

재고 목록 테이블에 '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

관련 문제