:包含错误值的搜索

时间:2011-09-13 21:17:29

标签: mysql ruby-on-rails-3 activerecord

我在Rails项目中有许多链接到用户的模型,我遇到了加载问题,我试图将所有用户的数据显示在页面上。

我的模型声明看起来像这样:

class User < ActiveRecord::Base
  validates_presence_of :server_user_id
  has_many :setup_notes, :foreign_key => "server_user_id"
  has_many :closure_votes, :foreign_key => "user_id"
end

class SetupNote < ActiveRecord::Base
  belongs_to :user, :foreign_key => "server_user_id"
end

我应该注意,在用于关闭投票的SQL表中,user_id与用户表中的server_user_id值相同。

当我尝试在Rails查询中使用:include符号时,当我需要通过user.id查找关闭投票和设置注释时,它最终使用user.server_user_id作为搜索值。换句话说,

me = User.first(:conditions => ["server_user_id = ?", 12610], :include => :setup_notes)

生成MySQL查询

SELECT `setup_notes`.* FROM `setup_notes` WHERE (`setup_notes`.server_user_id = 1)

返回一个空集。有没有办法格式化Rails查询/模型以发送相关的SQL查询,或者我是否需要为与用户关联的所有模型编写原始查询(如果是这种情况,我该怎么做?)

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解正确(用户有server_user_id字段),在用户模型中你必须设置:primary_key选项,如下所示:

class User < ActiveRecord::Base
  validates_presence_of :server_user_id
  has_many :setup_notes, :foreign_key => "server_user_id", :primary_key => "server_user_id"
  has_many :closure_votes, :foreign_key => "user_id", :primary_key => "server_user_id"
end