ruby - 使用 id 作为 ActiveRecord 中的普通列

标签 ruby activerecord

所以基本上我有 2 个问题。

首先,我想使用名为“article_id”的列作为我的文章表的主键。它在我的数据库中设置为 auto_increment 主键。

其次,我还需要使用名为“id”的列作为标准列。

现在发生的事情是,当我为“id”赋值时,“article_id”也被填充了相同的值。理想情况下,“article_id”应保持为空,以便在插入记录时为其提供生成的 auto_increment 值。我还应该注意,我需要使用名为“type”的列,这就是我覆盖 inheritance_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)

最佳答案

怎么样:

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

关于ruby - 使用 id 作为 ActiveRecord 中的普通列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528580/

相关文章:

ruby - 运行 `bundle install` 安装缺少的 gems

ruby - 在 Rspec 中进行特定测试后在 block 后运行

ruby-on-rails - 如何在具有名为 'valid' 的列的数据库上使用 ActiveRecord? (危险属性错误)

ruby - Ruby 中的 $DEBUG 全局变量

ruby-on-rails - 从Ruby中的字节流接收WAV文件

ruby-on-rails - Nokogiri:为什么只返回删除的标签而不返回剩余的标签?

ruby-on-rails - Rails 4 更新嵌套属性

php - 如何重置/清除 CodeIgniter 中两个连续查询之间的顺序?

ruby-on-rails - ActiveRecord::AdapterNotSpecified: 'postgresql' 数据库未配置

ruby-on-rails - Rails 方法只返回一条记录,返回多条记录时抛出异常