我有第二个数据库的表格,它不是通过迁移
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', '', '', '')
答案 0 :(得分:0)
你是如何创建表“pre_home_feed”的。如果是通过迁移,则默认情况下会添加id
列并将其设置为主键。为了不添加“id”列,您必须在表定义迁移文件中说:id => false, :force => true
并重新运行迁移。 (重新运行迁移首先需要回滚rake db:rollback
。此命令将撤消上次迁移运行。)
您设置主键的方式非常好。你可以用这样的标准方式创建对象;
@feed = Dzhfeed.new( :feedid => :value .. )
我建议你浏览Rails Guides。
<强>更新强>
链接到两个不同的数据库有点不同。基本上,您需要使用establish_connection中定义的ActiveRecord::Base方法来执行此操作:
establish_connection(
:adapter => "postgresql",
:host => "localhost",
:username => "username",
:password => "password",
:database => "database_to_link_to"
)
<强>更新强>
根据this post here,您的问题应该使用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
。这应该可以解决你的问题。