我有一个表形式的第二个数据库,它不是通过迁移
class Dzhfeed < Dzxdb
set_table_name "pre_home_feed"
set_primary_key :feedid
end
表:CREATE TABLE pre_home_feed (
feedid int(10) unsigned NOT NULL auto_increment ,
appid smallint(6) unsigned NOT NULL default '0' ,
icon varchar(30) NOT NULL default '' ',
uid mediumint(8) unsigned NOT NULL default '0' ,
username varchar(15) NOT NULL default '' ',
dateline int(10) unsigned NOT NULL default '0' ,
friend tinyint(1) NOT NULL default '0',
hash_template varchar(32) NOT NULL default '' ,
hash_data varchar(32) NOT NULL default '' ,
title_template text NOT NULL,
title_data text NOT NULL,
body_template text NOT NULL ,
body_data text NOT NULL,
body_general text NOT NULL ,
image_1 varchar(255) NOT NULL default '' ,
image_1_link varchar(255) NOT NULL default '',
image_2 varchar(255) NOT NULL default '' ,
image_2_link varchar(255) NOT NULL default '' ,
image_3 varchar(255) NOT NULL default '' ,
image_3_link varchar(255) NOT NULL default '' ,
image_4 varchar(255) NOT NULL default '' ,
image_4_link varchar(255) NOT NULL default '' ,
target_ids text NOT NULL ,
id mediumint(8) unsigned NOT NULL default '0' ,
idtype varchar(15) NOT NULL default '' ,
hot mediumint(8) unsigned NOT NULL default '0' ,
PRIMARY KEY (feedid),
KEY uid (uid,dateline),
KEY dateline (dateline),
KEY hot (hot),
KEY id (id,idtype)
) ;
但是这个表有另一个名为'id'的列,而不是primary_key
所以,当我想创建一个新的Dzhfeed,我不知道如何设置列名为id
我的代码是
feed = Dzhfeed.new(:appid => 0, :icon => 'doing', :uid => 1, :username => 'admin', :title_template => "xxxxxxxxxx", :body_template => '', :dateline => Time.now, :id => 0)
,但它不工作错误是
Mysql::Error: Column 'id' cannot be null: INSERT INTO `pre_home_feed` (`image_3`, `uid`, `id`, `dateline`, `title_template`, `idtype`, `image_1`, `username`, `body_template`, `image_1_link`, `image_3_link`, `friend`, `title_data`, `appid`, `body_data`, `image_2_link`, `hot`, `image_4_link`, `image_4`, `hash_template`, `body_general`, `icon`, `target_ids`, `hash_data`, `image_2`) VALUES ('', 1, NULL, 1304675043, 'xxxxxxxxxx', '', '', 'admin', '', '', '', 0, '', 0, '', '', 0, '', '', '', '', 'doing', '', '', '')
如何创建"pre_home_feed"表?如果是通过迁移,则默认情况下会添加一个id
列并将其设置为主键。为了不添加"id"列,您必须在表定义迁移文件中输入:id => false, :force => true
并重新运行迁移。(重新运行迁移首先需要回滚,rake db:rollback
。此命令将撤消上次迁移运行。)
你设置主键的方式是非常好的。你按照标准的方式创建对象,像这样;
@feed = Dzhfeed.new( :feedid => :value .. )
我建议你通过Rails指南。
更新:
链接到两个不同的数据库有点不同。实际上,您需要使用ActiveRecord::Base中定义的establish_connection方法来完成:
establish_connection(
:adapter => "postgresql",
:host => "localhost",
:username => "username",
:password => "password",
:database => "database_to_link_to"
)
更新:
根据这篇文章,你的问题应该使用composite_primary_keys gem来解决。
基本上你需要做的是:
安装gem composite_primary_keys,然后
require 'composite_primary_keys'
class Dzhfeed < Dzxdb
set_primary_keys :feedif
end
注意,它是set_primary_keys
而不是set_primary_key
。这应该能解决你的问题。