2014-07-07 33 views
0

我正在經歷Sinatra項目的一些非常特殊的結果。ActiveRecord沒有正確讀取方法參數

一切工作正常,今天早上我開始在我的ActiveRecord調用中出現錯誤。

我的第一個電話是從我的國家表得到一個隨機行

這種失敗:

@randomCountry = Country.where("name != ?", @countryName).first(:order => "RANDOM()")

,出現以下錯誤:

can't convert Hash into Integer

如果我離開出:命令,我沒有得到一個錯誤,所以這個工程:

@randomCountry = Country.where("name != ?", @countryName).first()

但顯然是不理想的,因爲它不是隨機的!

那麼一點點再往下我得到一個完整的國家名單如下:

@countriesList = Country.find(:all, :order => "name")

這個錯誤有以下幾點:

Couldn't find all Countries with 'code': (all, {:order=>"name"}) (found 0 results, but was looking for 2)

如果我省略名字的順序:

@countriesList = Country.find(:all)

我得到這個錯誤:

Couldn't find Country with 'code'=all

我國有代碼一個主鍵,但我以前能夠在所有撥打這個電話沒有任何問題。

任何幫助,試圖調試這是非常讚賞,我可以發佈更多的細節,如果它是必需的。

+0

尋找這裏:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods。 html#方法 - 我發現它看起來並不像以下所有對find方法的支持。你是在什麼版本的ActiveRecord? –

回答

1

如果你使用任何最近AR的版本,請嘗試:

Country.where("name != ?", @countryName).order('RANDOM()').first 
# If you're using AR 4 you can do: 
# Country.where.not(name: @countryName).order('RANDOM()').first 

Country.order('name').all 
+0

謝謝@ kardeiz,這解決了我的問題。任何想法爲什麼這可能停止工作?我沒有明確地在我的Gemfile中設置AR版本,在流氓軟件包之後,舊的語法是否會變得不受支持? – jolyonruss

+0

另外什麼是最新的穩定版本的AR?所以我可以明確地設置它。 – jolyonruss

+0

@jolyonruss,它看起來像支持'AR#find(:all)'和類似的東西在3.2中被刪除。我相信Rails(和ActiveRecord)的最新穩定版本是4.1.4。 –