0

「id」という自動インクリメントの主キーと「name」という文字列フィールドを使用して、「Doo_dad」というレガシーテーブルのデータにアクセスする必要がある新しいRailsアプリがあります。

そこで、 app / models/doodad.rbという新しいモデルファイルを作成しました。これは次のようになります。

class Doodad < ActiveRecord::Base
   set_table_name "Doo_dad"
end

Railsコンソールをロードすると、Railsで生成されたモデルにアクセスできましたが、クラスが表示されませんでした

> rails console
irb> Doodad.class
NameError: uninitialized constant Doodad
(from (irb):1: in `evaluate`

app / models/doodad.rbのクラスDoodadが読み込まれていませんでした。私が次のことをしたとき、このコードは良いです:

> rails console
irb> class Doodad < ActiveRecord::Base
irb> set_table_name "Doo_dad"
irb> end
irb> Doodad.class
 => OK
irb> d=Doodad.new
irb> d.name="Uno"
irb> d.save
 => OK no errors

つまり、 app / models / doodad.rbのコンテンツにモンキーパッチを適用すると、すべてが正常になり、「Uno」と呼ばれるDoodadがデータベースに保存されました。

Railsにレガシーテーブルに接続するモデルクラスをロードさせるにはどうすればよいですか?

4

1 に答える 1

0

ああ!app/models/dodads.rbにクラスがありました。名前をapp/models/dodad.rbに変更すると、すべて問題ありませんでした。

Rails モデル ファイルの命名規則 (filename=classname.underscore+".rb") を使用したファイルごとに 1 つのモデル クラスの規則は、これを機能させるために絶対に「必須」であると思います。

于 2011-10-24T22:10:47.823 に答える