所以基本上我有两个问题。
首先,我想使用名为“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)
答案 0 :(得分:1)
怎么样:
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