2010-12-14 13 views
1

レールで治具を使用しようとしています。すくいデシベル:備品:負荷がエラーなしで実行され、テーブルには私のデータを移入し、多くの私の多くは、テーブルが正しくないIDが含まれている参加:Rails 3 Fixture JoinテーブルのIDが正しくありません

例:

**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マイグレーションを実行しているとした後、 :

タグ:
ID ------タグ
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 

答えて

0

私はつもりあなたのモデルは、このようなものですと仮定します。

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列を持つことはできません。 posts_tagsのテーブル定義には:id => falseのようなものが必要です。

+0

posts_tagsテーブルがすでに使用して定義されてposts_tags、:ID => falseを致し| T | t.integer:post_id t.integer tag_id end。なぜrowid列が作成されるのか分かりません。 – Mark

1

適切な関連付けが定義されていると仮定しています。

**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:フィクスチャからすべてのIDを削除しました。それは正しい参照を生成します。しかし、これは正解ではありません。

+0

これは役に立ちませんでしたか? – Mark

+0

すぐに試してみましょう。あなたはRails 3にいますか? – Swanand

+0

また、どのような協会ですか? ( 'habtm'または' hm through'?) – Swanand

0

あなたのテストデータベースには、 "rowid"カラムを使用した古いスキーマがありますか?

てみてください。CREATE_TABLE:

rake db:test:clone 
関連する問題