Ruby on Rails 3 - 列'id'不是primary_key,如何重置关系



我有一个表形式的第二个数据库,它不是通过迁移

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。这应该能解决你的问题。

相关内容

  • 没有找到相关文章

最新更新