SQLite3 :: SQLException при попытке установить внешние ключи? - PullRequest
0 голосов
/ 29 января 2012

У меня есть три модели: Пользователь, Микросообщение и Комментарий.Я пытаюсь установить внешние ключи следующим образом:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.text :content

      t.timestamps
    end

    add_index :comments, :micropost_id, :user_id
  end
end

Но я получаю эту ошибку:

Произошла ошибка, эта и все последующие миграции отменены:

SQLite3 :: SQLException: около "user_id": синтаксическая ошибка: CREATE user_id INDEX "index_comments_on_micropost_id" ON "comments" ("micropost_id")

Я понимаю, что Rails вставляет внешние ключи на основе belongs_to и has_many объявления в моделях.Но у меня все установлено:

comment.rb:

class Comment < ActiveRecord::Base
  belongs_to :micropost
  belongs_to :user
end

micropost.rb:

class Micropost < ActiveRecord::Base
  attr_accessible :title, :content

  belongs_to :user
  has_many :comments
end

user.rb:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :microposts
  has_many :comments
end

Есть предложения, чтобы это исправить?

1 Ответ

1 голос
/ 29 января 2012

Если вы хотите создать индекс по 2 столбцам, синтаксис будет add_index table_name, [column1_name, column2_name], options.Вам также необходимо определить столбцы в таблице (ActiveRecord не добавляет их автоматически, когда вы добавляете belongs_to в класс модели).Таким образом, ваша миграция должна быть

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.text :content
      t.integer :micropost_id
      t.integer :user_id

      t.timestamps
    end

    add_index :comments, [:micropost_id, :user_id]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...