【问题标题】:Associated model isn't being created未创建关联模型
【发布时间】:2011-10-19 02:15:26
【问题描述】:

我是一个完整的 Rails 新手,如果这是微不足道的,请原谅我。

我有一个属于商店或旅行团的库存模型:

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

我创建了一个表单,提交后会创建一个旅行团和一些旅行者。现在我希望表单也创建一个 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

库存数据库表根本没有受到影响是有原因的吗?一旦可行,将 travel_party.inventory 初始化为全 0 的最佳方法是什么? (即牛、食物、衣服等的价值)。

【问题讨论】:

  • 这看起来很可疑:# Could not dump table "travelers" because of following StandardError # Unknown type 'relations' for column 'traveling_party_id'

标签: ruby-on-rails activerecord model


【解决方案1】:

这可能是因为您的库存表不包含“trader_type”。这是多态关联所必需的。

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

编辑:

要将所有值最初设置为 0,最好的方法是将默认值放在表中的字段上。 (如果你希望它在没有其他选项的情况下始终初始化为0,否则它们将默认为nil)

我相信您可以使用

创建迁移
change_table(:inventories) do |t|
  t.change :ox, :integer, :default => 0
end

【讨论】:

  • 谢谢!我们最终实现了 STI 而不是多态
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多