Получение "не имеет столбца с именем" при загрузке Rails Fixtures - PullRequest
2 голосов
/ 08 октября 2010

РЕДАКТИРОВАТЬ: Это с Rails 2.3.5

По какой-то причине, когда я пытаюсь связать CreditCard с Band в моем проекте, я получаю следующие ошибки

SQLite3::SQLException: table credit_cards has no column named band: INSERT INTO "credit_cards" ("created_at", "vault_token", "billing_zipcode", "billing_first_name", "updated_at", "band", "billing_state", "billing_city", "id", "billing_email_address", "billing_country", "billing_address", "billing_phone_number", "billing_last_name") VALUES ('2010-10-08 03:26:07', 'vaulttokenvalue', 12345, 'Test', '2010-10-08 03:26:07', 'beekin', 'TX', 'AnyCity', 714867248, 'none@none.com', 'US', '1234 Any Street', '5555555555', 'User')

и

SQLite3::SQLException: table bands has no column named credit_card: INSERT INTO "bands" ("name", "created_at", "next_payment_date", "updated_at", "credit_card", "account_type_id", "id", "hometown_city", "account_status", "subdomain", "hometown_state", "website", "account_type_name") VALUES ('Beekin', '2010-10-08 03:29:16', '2010-10-07', '2010-10-08 03:29:16', 'card_one', 715507355, 862144657, 'Nashville', 'ACTIVE', 'beekin', 'TN', 'http://www.beekin.com', 'MONTHLY')

Моя миграция выглядит как

class CreateCreditCards < ActiveRecord::Migration
  def self.up
    create_table :credit_cards do |t|
      t.references :band
      t.string :billing_first_name
      t.string :billing_last_name
      t.string :billing_address
      t.string :billing_city
      t.string :billing_state
      t.string :billing_zipcode
      t.string :billing_country
      t.string :billing_email_address
      t.string :billing_phone_number
      t.string :vault_token

      t.timestamps
    end

    add_column :bands, :credit_card_id, :integer
  end
end

Мой прибор bands.yml выглядит так:

beekin:
  name: Beekin
  website: "http://www.beekin.com"
  hometown_city: Nashville
  hometown_state: TN
  subdomain: beekin
  account_type: monthly
  account_type_name: "MONTHLY"
  account_status: "ACTIVE"
  credit_card: card_one
  next_payment_date: <%= Date.today %>

И мой крепеж credit_cards.yml выглядит так:

card_one:
  band: beekin
  billing_first_name: Test
  billing_last_name: User
  billing_address: "1234 Any Street"
  billing_city: AnyCity
  billing_state: TX
  billing_zipcode: 12345
  billing_country: US
  billing_email_address: "none@none.com"
  billing_phone_number: "5555555555"
  vault_token: vaulttokenvalue

Может кто-то, ПОЖАЛУЙСТА, указать, что я делаю неправильно. Я сравнил его с другими приборами, и похоже, что он должен работать, но это не так.

Иметь has_one: credit_card (в модели band) и own_to: band (в модели credit_card). Я просто сейчас потерян.

Ответы [ 2 ]

0 голосов
/ 20 октября 2010

Это также не очень хорошее решение, но вы можете получить непротиворечивые идентификаторы, хэшируя имя прибора с Fixtures.identify.

beekin:
  name: Beekin
  website: "http://www.beekin.com" 
  hometown_city: Nashville
  hometown_state: TN
  subdomain: beekin
  account_type: monthly
  account_type_name: "MONTHLY"
  account_status: "ACTIVE"
  credit_card_id: <%= Fixtures.identify(:card_one) %>
  next_payment_date: <%= Date.today %>

см. http://ar.rubyonrails.org/classes/Fixtures.html#M000009 для получения дополнительной информации.

(тайно, я думаю, именно так Rails реализует перекрестные ссылки на "простые имена").

0 голосов
/ 08 октября 2010
card_one:
  band_id: 1 //or any other Band id
  billing_first_name: Test
  billing_last_name: User
  billing_address: "1234 Any Street"
  billing_city: AnyCity
  billing_state: TX
  billing_zipcode: 12345
  billing_country: US
  billing_email_address: "none@none.com"
  billing_phone_number: "5555555555"
  vault_token: vaulttokenvalue

и

beekin:
  name: Beekin
  website: "http://www.beekin.com" 
  hometown_city: Nashville
  hometown_state: TN
  subdomain: beekin
  account_type: monthly
  account_type_name: "MONTHLY"
  account_status: "ACTIVE"
  credit_card_id: 1 // or any other Card id
  next_payment_date: <%= Date.today %>
...