Rails错误:对象不支持#inspect

时间:2011-10-26 04:26:42

标签: ruby-on-rails activerecord ruby-on-rails-3.1

在这里抓我的头......如果我尝试使用rails:

User.limit(25).includes([:addresses])

我明白了:

 User Load (109.5ms)  EXEC sp_executesql N'SELECT TOP (25) [User].* FROM [User]'
 Address Load (112.3ms)  EXEC sp_executesql N'SELECT [Address].* FROM [Address] WHERE [Address].[UserId] IN (N''1'', N''2'', N''3'', N''6'', N''7'', N''8'', N''9'', N''11'', N''12'', N''16'', N''17'', N''18'', N''19'', N''20'', N''21'', N''22'', N''24'', N''25'', N''26'', N''27'', N''28'', N''29'', N''30'', N''31'', N''34'')'
(Object doesn't support #inspect)
 =>  

如果我改为

@users = User.limit(25).joins([:addresses])

这样可以正常工作,但是内连接不是我想要的,我实际上是通过仅支持包含的sunspot_rails来实现这一点。

我不完全确定这个错误是什么。我怀疑这可能是因为这是一个遗留的MSSQL数据库,所以命名约定远不及rails喜欢的。但是我不知道具体问题是什么。

模型如下,剥离到最小值,经过验证可以重现问题:

class User < ActiveRecord::Base
  set_table_name "User"
  set_primary_key "ID"

  has_many :addresses, :foreign_key => 'UserId'
end

class Address < ActiveRecord::Base
  set_table_name "Address"
  set_primary_key "ID"
  belongs_to :user
end

就是这样。在用户模型上还有其他用于搜索和身份验证的代码,但我评论说,全部出来并验证它对此问题没有影响。我坚持这一点,任何帮助表示赞赏。该应用程序使用rails 3.1,带有activerecord-sqlserver-adapter和tiny_tds。

1 个答案:

答案 0 :(得分:0)

...解决

:foreign_key =&gt; “UserID”,而不是:foreign_key =&gt; “用户ID”

出于某种原因,在进行非预期加载或使用.joins时,大小写差异似乎并不会影响轨道,但是使用.include。卫生署。