假设我有一个旧的 MySQL 表,名为server
字段serverid:integer
和
servername:string
.
我创建了一个名为 action 的新表,其中包含:
t.integer :actionable_id
t.string :actionable_type
t.string :text
我希望这个表与旧服务器表有一个多关系。
当我这样做时:
class Server < ActiveRecord::Base
set_table_name "server"
set_primary_key "serverid"
has_many :actions, :as => :actionable, :foreign_key => 'serverid'
end
class Action < ActiveRecord::Base
belongs_to :actionable, :polymorphic => true
end
我试图得到Server
一个给定的Action
:
ruby-1.9.2-p180-patched :013 > Action.first.actionable
我收到此错误:
Mysql2::Error: Unknown column 'server.id' in 'where clause': SELECT
`server`.* FROM `server` WHERE `server`.`id` = 10 LIMIT 1
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column
'server.id' in 'where clause': SELECT `server`.* FROM `server` WHERE
`server`.`id` = 10 LIMIT 1
我怎样才能让动作知道主键是serverid
和不是id
,就像它知道这里的表名是
server
不是一样servers
?它不应该使用 set_primary_key 值吗?
这是多态关系错误吗?
编辑:应用下面的更改(添加primary_key)后,它适用于服务器关系,但我确信它对于其他关系会失败。
class Action < ActiveRecord::Base
belongs_to :actionable, :polymorphic => true, :primary_key => 'serverid'
end
IMO,primary_key的值应该被目标的primary_key自动识别。