在这里抓我的头......如果我尝试使用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。
答案 0 :(得分:0)
...解决
:foreign_key =&gt; “UserID”,而不是:foreign_key =&gt; “用户ID”
出于某种原因,在进行非预期加载或使用.joins时,大小写差异似乎并不会影响轨道,但是使用.include。卫生署。