Rails中的set_primary_key错误
我正在创建一个名为Index
的表。 这是迁移:
class CreateIndices false} do |t| t.string :name t.float :returns, array: true, default: [] t.float :navs, array: true, default: [] t.float :sharpe t.timestamps end execute "ALTER TABLE indices ADD PRIMARY KEY (name);" end end
一切正常。 我在另一个Stack Overflow问题中看到,我必须在我的模型中包含set_primary_key
命令才能使它工作,所以我在index.rb中有以下内容
class Index < ActiveRecord::Base set_primary_key :name end
除了这两个文件之外,我没有更改默认的Rails脚手架(该应用程序是使用Postgres创建的默认数据库)。 当我转到localhost:3000/indices
,我收到以下错误
undefined method `set_primary_key' for #
如果我注释掉set_primary_key
行,它会加载常规的空脚手架,但我认为这并没有给我我想要的主键function。 我究竟做错了什么?
如果您使用的是rails 3.2或更高版本,那么set_primary_key
方法已经过折旧,请查看Rails 3.2发行说明 – 第8.1节,它建议使用分配方法,例如self.primary_key=
,就像您在评论中所做的那样
它究竟是一种类方法:
不要忘记适当的迁移:
def up create_table :books, {id: false, primary_key: :key_id} do |t| t.timestamps etc. end execute <<-SQL ALTER TABLE books ADD PRIMARY KEY (key_id) SQL end def down drop_table :books end
如果要在生成的路由(routes.rb)中使用此新主键:
resources :books, only: [:show, :edit, :update], param: :key_id
希望能帮助到你 !
照顾自己
奇怪的。 根据我预期的文件
class Index < ActiveRecord::Base set_primary_key "name" end
上class。 我能看到的唯一区别是"name"
字符串与你的:name
符号不应该有任何区别。
更新
实际上,在该链接的顶部是一个已弃用的消息(抱歉)。 显然它现在是一个类方法,因此解释了对self.set_primary_key
的需求。 卫生署!
- 使用WebMockvalidationHTTPS调用
- Rails 4:RSolr :: Error :: Http(RSolr :: Error :: Http – 404 Not Found
- Railsvalidation可防止保存
- Rails 4 / ajax – NoMethodError – nil的未定义方法`id’:NilClass – 将变量传递给js模态
- 如何使用arel / relational algebra和has_many:through获取不同的值
- 使用VAPID进行网络推送:400/401未经授权的注册
- Rails如何在2个日期之间创建每月的图表数据?
- form_for自从升级到rails 3.1以来错误的参数数量(3个用于2)
- 在Ruby on Rails 3中制作通用模型时出现的问题