Связанная модель не создается - PullRequest
0 голосов
/ 19 октября 2011

Я полный рельсовый новичок, так что простите меня, если это тривиально.

У меня есть модель инвентаря, которая принадлежит либо Магазину, либо Путешествующей партии:

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

Iсоздал форму, которая при отправке создает путешествующую сторону и несколько путешественников.Теперь я хотел бы, чтобы форма также создала Inventory и инициализировала все переменные в 0. Я знаю, что следующее не решает проблему инициализации переменных, но, похоже, даже не помещает строку с нулевыми значениями в таблицу базы данных Inventory..

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

Существует ли причина, по которой таблица базы данных инвентаризации вообще не затрагивается?И как только это сработает, каков будет наилучший способ инициализации путешествия_party.inventory, чтобы иметь все 0?(т. е. значения для быка, еды, одежды и т. д.).

1 Ответ

0 голосов
/ 19 октября 2011

Это может произойти из-за того, что ваша таблица запасов не содержит тип trader_type.Это требуется для полиморфных ассоциаций.

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

Редактировать:

Чтобы изначально установить все значения на 0, лучшим способом было бы поместить значение по умолчанию в поля таблицы..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...