2011-07-07 7 views
1

Rails3でSqlite3を使用すると、has_and_belongs_to_manyという状況で「ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:そのような列はありません」というメッセージが表示されます。 sqlite3のに接続されたレールコンソールから、エラー場合page.editors又はpage.admin_usersRails3とSQLite3 :: SQLException:そのような列はありませんHABTM

[[[EDIT:結合テーブルIDの]]であるため入力ミスの解決]

宝石

レール3.0をインストールしました。 9

sqlite3の1.3.3のx86 MINGW32

sqlite3のルビ

(win7の64ビットDEV機)

page.rb - > OK

 




> class Page  
>  belongs_to :subject 
>  has_many :sections 
>  has_and_belongs_to_many :editors, :class_name => "AdminUser" 
>  #has_and_belongs_to_many :admin_users 
>   
>  end 

admin_users.rb - > OK

 


> class AdminUser  
>  has_and_belongs_to_many :pages 
>  scope :named, lambda {|first,last| where(:first_name => 
> first, :last_name => last)} 
>  
>  end 

移行ファイル - >タイプミスを見抜きます!

 
    class CreateAdminUsersPagesJoin false do |t| 
      t.integer :admin_users_id, :foreign_key => true # Should be admin_user_id 
      t.integer :page_id, :foreign_key => true 
     end 
     add_index :admin_users_pages, [:admin_users_id, :page_id] # Again admin_user_id 
     end 

     def self.down 
     drop_table :admin_users_pages 
     end 

    end 

レールコンソールエラーポストのためのヘイッキへ

 
irb(main):004:0> page.admin_users 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: admin_users_pages.admin_user_id: SELECT * FROM "admin_users 
" INNER JOIN "admin_users_pages" ON "admin_users".id = "admin_users_pages".admin_user_id WHERE ("admin_users_pages".page_id = 2) 

感謝。私はそれだけでここに戻ってきた(ああ)前に私はそれを固定しましたが、私は喜んで答えを受け入れるでしょう。それを投稿すると、正しいことを確認します。乾杯。

+0

あなたはdefの移行からself.up' '欠落していませんか? – Heikki

+1

':admin_users_id'はおそらく':admin_user_id'です。 – Heikki

+0

コメントありがとうございます。 def self.upはそこにあるので、私はstackoverflowがペーストを見逃したと思いますか?とにかく、1つのタイプミスだけでなく、2つも持っていました。私はsqlite3に行き、.schema admin_users_pagesを打ちました。私は外部キーが複数であることを見て、ひとつのコメントを確認しました。また、索引も複数形として間違っていることに注意してください。私はそれを修正したと思う。私はsqlite3-rubyがGemfileに入っていることを確認し、バンドルの更新を実行しました。それを自分で解決しましたが、私はそれが問題だったので、ここでHeikkiを担当します。 Heikki、私は私の投稿を更新し、あなたはあなたの答えを投稿し、私はそれを確認します。乾杯 – sf2k

答えて