我要做的是选择特定列并在其上使用别名,并在named_scope中使用它。我想使用别名,因为稍后我会根据我创建的SQL尝试连接多个表时使用它作为一个想法。
修改的: 我在Rails 2.3.8和Ruby 1.8.7中运行
这是我的named_scope ...
named_scope :prog_result,:select => "users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'",
:joins => {:department => :version}
当我尝试在控制台User.prog_result
中调用它时,结果就是这个......
[#<User username: "respondent1", lastname: "res", firstname: "pon">, #<User username: "2222", lastname: "Numero", firstname: "Dos">]
User.prog_result.find(2)
2是用户“respondent1”的ID,User.prog_result.inspect
的结果是
"[#<User username: \"respondent1\", lastname: \"res\", firstname: \"pon\">, #<User username: \"2222\", lastname: \"Numero\", firstname: \"Dos\">]"
有人能告诉我我做错了什么吗?..
答案 0 :(得分:1)
我不确定你的问题,但我假设您正在查看User对象并且rails返回一个数组。
如果是这种情况,named_scope将始终返回一个数组(就像你做一个User.find_all())
即使只有一条记录
希望我的问题是对的..
感谢和问候
sameera
答案 1 :(得分:1)
当您在控制台中调用User.prog_result
时,您实际上正在调用User.prog_result.inspect
控制台通过在结果对象上调用#inspect
来显示结果。
如果您在控制台中调用User.prog_result.class
,则会看到它是ActiveRecord::NamedScope::Scope
。
如果你在这些被返回的对象中戳,你可能会找到你期望的东西。
User.prog_result.first.department => first joined department.name
User.prog_result.last.version => last joined version.number
在Rails 3.1中不推荐使用命名范围和传递:joins
,:conditions
和:select
,因此除非您使用的是Rails 2.3.x,否则您可能不应该使用它们开发新代码。你会想做这样的事情:
User.joins(:department => :version).
select("users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'")