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)
感謝。私はそれだけでここに戻ってきた(ああ)前に私はそれを固定しましたが、私は喜んで答えを受け入れるでしょう。それを投稿すると、正しいことを確認します。乾杯。
あなたはdefの移行からself.up' '欠落していませんか? – Heikki
':admin_users_id'はおそらく':admin_user_id'です。 – Heikki
コメントありがとうございます。 def self.upはそこにあるので、私はstackoverflowがペーストを見逃したと思いますか?とにかく、1つのタイプミスだけでなく、2つも持っていました。私はsqlite3に行き、.schema admin_users_pagesを打ちました。私は外部キーが複数であることを見て、ひとつのコメントを確認しました。また、索引も複数形として間違っていることに注意してください。私はそれを修正したと思う。私はsqlite3-rubyがGemfileに入っていることを確認し、バンドルの更新を実行しました。それを自分で解決しましたが、私はそれが問題だったので、ここでHeikkiを担当します。 Heikki、私は私の投稿を更新し、あなたはあなたの答えを投稿し、私はそれを確認します。乾杯 – sf2k