【发布时间】:2011-01-19 15:32:33
【问题描述】:
亲爱的开发人员,我对 Rails 模型有一些问题 这是我的 sql 表
create_table "areas", :primary_key => "ndc", :force => true do |t|
t.string "townname", :limit => 256, :null => false
end
create_table "books", :primary_key => "ndc", :force => true do |t|
t.integer "booked", :null => false
t.integer "free", :null => false
end
class Book < ActiveRecord::Base
self.primary_key = "ndc"
has_one :area, :foreign_key => 'ndc'
end
class Area < ActiveRecord::Base
self.primary_key = "ndc"
belongs_to :book , :foreign_key => 'ndc'
end
在控制器中我有这样的代码
@books = Book.paginate :page => params[:page] || 1, :per_page => 10
@books.each do |booking|
p booking.area
p booking
end
在生产模式下不起作用,booking.area 是 nil 对象。它可以是什么?
如果 config.cache_classes = true,则区域变为 nil
所以 booking.area 生成这样的查询
如果 Cashe_classes = true
选择areas.* FROM areas WHERE (areas.ndc = NULL) 限制 1
但没有兑现课程
SELECT areas.* FROM areas WHERE (areas.ndc = 30) 限制 1
通过从区域类中删除 belongs_to :book , :foreign_key => 'ndc' 来修复。
【问题讨论】:
-
我在 Book 类中添加了 self.primary_key = "ndc" 并且关联似乎现在正在工作。谢谢
-
是的,任何时候您使用除“id”之外的名称作为主键字段时,都必须在 ActiveRecord 类中插入一条语句来指定该主键。
-
好的,我更新了我的问题
标签: ruby-on-rails-3 activerecord