2

わからないこの奇妙なエラーがあります。User私は次のように定義されたモデルを持っています:

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

has_many :caves
end

そして、関連するモデルは次のCaveように定義されます。

class Cave < ActiveRecord::Base
  belongs_to :user
end

ユーザーのshowメソッドで、新しい洞窟を作成することを提案します。

<%= 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>

しかし、ページを表示すると、次のエラーが発生します。

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 :cave変更has_many :cavesすると(そしてユーザーのshow.html.erbの形式で変更すると、ページは正常に表示されます。しかし、私の関係は1対多です。したがって、ユーザーでは「洞窟」ではなく「洞窟」と読み替える必要があります。ここSOやその他の場所で関連するすべての質問を読んだと思いますが、どの解決策も当てはまらないようです。

4

3 に答える 3

4

Rails は、Caves の単数形が Cave であることを認識していないようです。これは config/initializers/inflections.rb で手動で設定できます:

inflect.irregular 'cave', 'caves'

次に、Cafe の代わりに Cave を見つけようとします。

于 2012-03-10T16:05:58.777 に答える
1

あなたの問題は、Rubyがやや「独創的な」インフレクターを使用して「洞窟」を特異化し、最終的に「カフェ」を生成することです。

config の inflections.rb で動作を修正できます。

于 2012-03-10T16:08:19.457 に答える
-1

エラーは、show.html.erbビューファイルではなくビューファイルを示していnew.html.erbます。

多分あなたはにタイプミスがありshow.html.erbます。確認してください!

于 2012-03-10T16:14:10.737 に答える