Используйте id как обычный столбец в ActiveRecord - PullRequest
2 голосов
/ 30 июня 2011

Так что в основном у меня 2 проблемы.

Во-первых, я хотел бы использовать столбец с именем "article_id" в качестве первичного ключа для моей таблицы статей.Он настроен как первичный ключ auto_increment в моей базе данных.

Во-вторых, мне также нужно использовать столбец с именем "id" в качестве стандартного столбца.

Теперь происходит то, что когда я назначаюзначение "id", "article_id" также заполняется тем же значением.В идеале «article_id» должен оставаться пустым, чтобы при вставке записи ей было сгенерировано значение auto_increment.Я также должен отметить, что мне нужно использовать столбец с именем «type», поэтому я перезаписал значение column_column.

Вот моя текущая модель

class Article < ActiveRecord::Base
  attr_reader :id
  attr_reader :type

  set_primary_key :article_id

  set_inheritance_column do
    'active_record_type'
  end

  def id=(id)
    @id = id
  end
end

И она заполняетсяс помощью следующего кода

article = Article.new
article.type = 123
article.name = 'Foo Bar'
article.id   = 456
article.save

Итак, в основном, как получить приведенный выше код для генерации запроса, который выглядит как

INSERT INTO `articles` (`type`, `name`, `id`) VALUES(123, 'Foo Bar', 456)

Но в настоящее время он генерирует запрос, который выглядит как

INSERT INTO `articles` (`type`, `name`, `id`, `article_id`) VALUES(123, 'Foo Bar', 456, 456)

1 Ответ

1 голос
/ 30 июня 2011

Как насчет:

class Article < ActiveRecord::Base
  set_primary_key :article_id

  def id
    self.read_attribute(:id)
  end

  def id=(id)
    self.write_attribute(:id, id)
  end
end

>> a = Article.new
>> a.id = 111
>> a.name = "First"
>> a.save
  Article Create (0.6ms)   INSERT INTO "articles" ("name", "id") VALUES('First', 111)
>> Article.all
=> [#<Article article_id: 5, id: 111, name: "First">]
>> Article.first.id
=> 111
>> Article.first.article_id
=> 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...