named_scope没有显示正确的列

时间:2011-09-21 06:05:46

标签: ruby-on-rails named-scope

更新

我要做的是选择特定列并在其上使用别名,并在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\">]"

有人能告诉我我做错了什么吗?..

2 个答案:

答案 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'")