Идентификаторы таблицы соединений Fixs Rails 3 неверны - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь работать с приборами в рельсах. Грабли db: fixtures: load выполняются без ошибок, и таблица заполняет мои данные, но моя таблица соединения многих со многими содержит неверные идентификаторы:

Пример:

**tags.yml**
one:
  id: 1
  tag: pie
  posts: two

two:
  id: 2
  tag: cake
  posts: one, two

**posts.yml**
one:
  id: 1
  subject: subject
  content: content
  slug: woot
  tags: cake

two:
  id: 2
  subject: subject2
  content: content2
  slug: this_is_good
  tags: pie, cake

После выполнения миграций и db:fixtures:load мои таблицы заполняются как:

теги:
Идентификатор ------ тэг
1 ...... пирог
2 ...... торт

posts_tags:
rowid - post_id - tag_id
1 ...... 1 ...... 974324064
2 ...... 2 ...... 576189563
3 ...... 3 ...... 974324064

По какой-то причине автоматически сгенерированный tag_id создается и заполняется в моей таблице соединений. Почему?

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

Миграции определяются как:

  def self.up
    create_table :posts do |t|
      t.string :subject
      t.text :content

      t.timestamps
    end
  end

и

  def self.up
    create_table :tags do |t|
      t.string :tag

      t.timestamps
    end

    create_table :posts_tags, :id => false do |t|
      t.integer :post_id
      t.integer :tag_id
    end
  end

Ответы [ 3 ]

1 голос
/ 14 декабря 2010

Я предполагаю, что у вас определены правильные ассоциации. Вам просто нужно небольшое изменение в ваших приспособлениях:

**tags.yml**
one:
  tag: pie
  posts: two

two:
  tag: cake
  posts: one, two

**posts.yml**
one:
  subject: subject
  content: content
  slug: woot
  tags: 
    - two

two:
  subject: subject2
  content: content2
  slug: this_is_good
  tags: 
    - one
    - two

EDIT: я удалил все идентификаторы из приборов. Это создает правильные ссылки. Но это не совсем правильный ответ.

0 голосов
/ 16 декабря 2010

Может быть, в вашей тестовой базе данных есть старая схема, в которой вы использовали столбец rowid?

Попробуйте:

rake db:test:clone
0 голосов
/ 14 декабря 2010

Я предполагаю, что ваши модели примерно такие.

class Tag Post < ActiveRecord::Base
  has_and_belongs_to_many :posts
end

class Post < ActiveRecord::Base
  has_and_belongs_to_many :tags
end

Это означает, что таблица соединений posts_tags может содержать только post_id и tag_id в качестве столбцов.У него не может быть столбца rowid.Вам понадобится что-то вроде :id => false в определении таблицы posts_tags.

...