2009-05-03 43 views
0

失敗我有這個代碼塊:AR.to_json工程在控制檯中,在瀏覽器中

users = Array.new 
users << User.find(:all, :conditions => ["email like ?", "%foo%"]) 
users << User.find(:all, :conditions => ["name like ?", "%bar%"]) 
users.flatten! 
users.uniq! 
puts users.to_json :include => [:licenses] 

當我運行使用腳本/控制檯,它返回正是你會認爲它應該的JSON表示我找到的用戶數組,扁平化和獨特。但是運行同一行代碼爲search_for_users方法的一部分,我得到這個錯誤

類型錯誤在ControllerName#search_for_users
錯誤的參數類型哈希(預期數據)

,並參考了線帶.to_json調用的行。

這讓我感到莫名其妙,因爲代碼是完全一樣的。唯一的區別是,當我在控制檯中運行它時,我手動輸入了條件,但在我的方法中,我從params[:query]提取查詢。但是,我只是試圖對查詢進行硬編碼並得到相同的結果,所以我不認爲這是問題。如果我刪除了:include,我看不到錯誤,但我也沒有收到我想要的數據。

任何人都知道這個問題可能是什麼?

+0

當用戶只包含一個用戶,通過恆定的ID,而不是User.find獲取該問題是否發生? – pts 2009-05-03 15:45:47

+0

不,如果我做`find(some_id).to_json:include => [:licenses]`我得到的許可證沒有問題。那麼我猜這就指向了Enumerable#to_json這個問題了? – jxpx777 2009-05-03 16:27:16

回答

1

有幾個插件和寶石會導致.to_json失敗,如果包含在您的控制器中。我相信Twitter的寶石是他們中的一員(一段時間後面碰到這個問題)。

在這個控制器中你有「包括[任何]」或「需要[任何]」嗎?

如果沒有,我建議暫時刪除您使用的是排除任何插件等

最後,如果你有簡單更換整個控制器的動作會發生什麼: %W(1 2 3 4 5).to_json

這應該可以幫助您確定失敗的原因。

0

每當測試或控制檯中的代碼表現與生產環境不同(這是一種猜測......您可能正在開發模式下運行您的網站),這就要求加載訂單問題。在生產環境中,所有模型和控制器都預加載,而在其他環境中,需要時會延遲加載。 用RAILS_ENV=production ./script/console啓動您的控制檯,看看您是否可以通過這種方式重現錯誤。 正如cscotta提到的,有一些寶石和圖書館可能會干擾.to_json,首先提到功能,當你需要'json'時你會得到。我個人遇到了幾個問題。

希望這有助於

勒布

相關問題