2011-09-21 55 views
1

更新

我想要做的是選擇特定列並使用它們的別名,並在named_scope中使用它。我想使用別名,因爲稍後我會基於我創建的SQL嘗試連接多個表時將其用作想法。named_scope不顯示正確的列

編輯: 林對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\">]" 

誰能告訴我什麼我做錯了嗎?..

回答

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 

兩個命名範圍,並通過:joins:conditions:select被棄用Rails的3.1,所以你可能不應該發展與他們的新代碼,除非你是on 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'") 
+0

對不起,我正在運行Rails 2.3.8我編輯了我的問題。你對'User.prog_result.class'是正確的,它確實在控制檯中返回了'ActiveRecord :: NamedScope :: Scope',並且在它內部戳了一下。但是,當我試圖得到部門它返回'nil' idk爲什麼,但與我以前的代碼我用'User.find_by_sql()'我有他們的部門.. – jovhenni19

1

我不會放棄不確定您問題,但我假設你正在查看一個User對象,並且rails返回一個數組。

如果那的情況下,named_scope總是會返回一個數組(就像你做一個User.find_all())

即使只有一條記錄

希望我得到了你的問題的權利..

感謝和問候

sameera