2016-03-27 6 views
-4

O.k.これは私を夢中にさせています。Railsアクティブレコードが破損しているように見える、Rails 4.0.2

私は、単純なテーブル「スレッド」と、1つのレコード(id = 1、name = "space")を持つ "name"フィールドを持っています。

"Thread.rb"というモデルがあります。

class Thread < ActiveRecord::Base 
end 

私が呼び出して、コントローラがあります。

@thread = Thread.find_by_id(1) 

をしかし、私は、コントローラで次のエラーを取得するページをロードするとき:

undefined method `find_by_id' for Thread:Class 

私は中find_by_sql何度も使用しました同じプロジェクトで問題はありませんが、単純なactiverecordアクセサを使用すると「find」、「find_by_id」などのエラーが発生します。

私はレール上にあります。4.02

+0

'@thread = Thread.find(1)'を試してみてください。また、activerecord finderメソッドのための便利なリンクがあります:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html –

+0

さて、私はしました。何らかの理由で、私は、レールが私のスレッドクラスを見ていないと思う。しかし、スレッドモデルでもfind_by_sqlを使うことさえできません。 – user3096851

答えて

4

確かにThreadはRailsの予約語ですが、私は同じ問題があることを思い出しています。クラスの名前を変更すると解決するはずです。私はthis community authored siteを予約済みのRails単語のリストで見つけることができました。

+0

それはそれでした。本当にありがとう! – user3096851

1

railsは、const_missingにフックすることによってオートロード機構を持ち、一定の命名規則とautoload_pathsのいくつかの組み合わせを使用しています。

ruby標準ライブラリまたはrailsのいずれかですでに定義されている定数を参照すると、その定数は既にロードされている定数に参照されます。

Threadruby標準ライブラリの一部です。そのため、Thread.find_by_id(1)と言うときは、モデルの代わりにそれを参照しています。

詳細については、ThreadおよびModule#const_missingを参照してください。

関連する問題