2012-03-10 14 views
2

私はこの奇妙なエラーを私は理解していません。Ruby初期化されていない定数名エラー

<%= form_for([@user, @user.caves.build]) do |f| %> 
<div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
</div> 
<div class="actions"> 
    <%= f.submit %> 
</div> 
:私は新しい洞窟を作成するために提供し、私のユーザーのshowメソッドで

class Cave < ActiveRecord::Base 
    belongs_to :user 
end 

、:

class User < ActiveRecord::Base 
validates_presence_of :name, :email 

has_many :caves 
end 

、以下のように定義関連するモデルCave:私は以下のように定義モデルUserを持っています

ページを表示すると、次のエラーが表示されます。

NameError in Users#show 
Showing E:/Vinisync/app/views/users/show.html.erb where line #19 raised: 

uninitialized constant User::Cafe 

Extracted source (around line #19): 
16: </p> 
17: 
18: <h2>Add a Cave</h2> 
19: <%= form_for([@user, @user.caves.build]) do |f| %> 
20: <div class="field"> 
21:  <%= f.label :name %><br /> 
22:  <%= f.text_field :name %> 

この「カフェ」はどこから来ているのか分かりませんが、私はこのコードをどこにも持っていません!
私が気付いたのは、User.rbの関連する名前を変更すると、has_many :cavesの代わりにhas_many :caveが現れていることです(ユーザーのshow.html.erbのフォームで変更してもページは正常に表示されます)。私は、ここで関連するすべての質問をここや他の場所で読んだと信じていますが、解決策のどれもが適用されないようです。

答えて

4

サウンドRailsは洞窟の単数形は洞窟であることを認識しないようにあなたは、設定/初期化子/ inflections.rbでこれを手動で設定することができます。

inflect.irregular 'cave', 'caves' 

をそれからそれは洞窟の代わりに、カフェを見つけようとしますe。

+0

ありがとうございました!あなたはこれを取り除いてどれくらい安心しているか分かりません。この種のエラーが頻繁に発生しますか? – Antoine

+0

通常、Railsは変態や正しい複数形または単数形の単語を見つけるのにはかなり良いです...それらの中に "v"が付いた単語は、通常よりも頻繁にそれを混乱させるようです。たとえば、 "loves"のデフォルトの単数形は "lofe"です。 – Veraticus

+0

当時とまったく同じエラーです。私はルビーには新しく、特に私がモデルの一部をフランス語にしようとしているので、これを見守っていきます。 – Antoine

1

あなたの問題は、Rubyがやや「独創的な」Inflectorを使用して「洞窟」を特異化し、「カフェ」を生成するということです。

あなたの設定のinflections.rbで動作を修正することができます。

-1

このエラーは、ビューファイルであり、new.html.erbビューファイルではありません。

show.html.erbに入力ミスがある可能性があります。それをチェック!