所以基本上我有 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/