1

私は初心者のRails開発者であり、CityControllerの「new」アクションにアクセスしようとすると次のエラーが発生します。

undefined method `cities_path' for #<#<Class:0x104608c18>:0x104606f08>
Extracted source (around line #2): 
1: <h1>New City</h1>
2: <%= form_for(@city) do |f| %>
3:   <%= f.error_messages %>
4: 
5:   <div class="field">

いくつかの背景として、私は多くの都市を持つ州モデルを持っています。州のショーページからの次のリンクをクリックすると、このエラーが発生します。

<p>Add a city: <%= link_to "Add city", new_state_city_path(@state) %></p>

'rake:routes'を実行すると、これは正当なルートであると表示されます...

詳細については、CityControllerの「新しい」アクションを次に示します。

def new
@city = City.new

respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @city }
end
end

ビューの(完全な)フォームは次のとおりです。

<%= form_for(@city) do |f| %>
<%= f.error_messages %>

<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>

これは最初、「cities_path」についての言及が戻ってきたので、リソース/ルートの問題だと思いました(実際、Stack Overflowに投稿している別の人が間違っていたのです(Railsエラー「NoMethodError」-私の最初のrubyアプリ)。しかし、私が見ることができるものからはそうではないようです。ルートファイルでのリソースの外観は次のとおりです。

resources :states do
  resources :cities
end

サブリソースでない場合でも機能させることができますが、アプリを使用した将来の計画のために、サブリソースとして保持する必要があります。私が認めるよりも何時間もこれに頭を悩ませてきたので、どんな助けでも大歓迎です...ありがとう!

(これがまったく問題になるかどうかはわかりませんが、私はRails 3 beta2の最新バージョンを実行しています)。

4

3 に答える 3

2

form_forあなたの問題は、上記のあなたの見解の2行目、特に宣言から来ています。ご指摘のとおり、state_city_pathは有効なパスですが、現在、フォームはこのパスを使用しておらず、を使用していcity_pathます。ネストされたリソースを使用する場合は、そのネストに関してすべてを定義する必要があります。あなたform_forは次のように見えるはずですform_for([@state, @city]) do(正確な構文は覚えていません)。

フォローアップの回答は機能しますが、州のコンテキストにない都市を確認できるようにしたい場合を除いて、それを実行するための最善の方法ではありません。

お役に立てれば。

PS。form_forのドキュメントは非常に優れており、リソースで使用する場合のいくつかの良い例を示しています。

于 2010-04-18T15:31:35.627 に答える
1

気にしないでください-私はそれを理解したと思います...私は都市をそれ自体のリソースとして、そして州のサブリソースとして定義する必要がありました。今ではうまくいくようです。

于 2010-04-18T15:23:32.803 に答える
1

問題は次の行で発生する可能性が最も高いです。

<p>Add a city: <%= link_to "Add city", new_state_city_path(@state) %></p>

そのはず :

<p>Add a city: <%= link_to "Add city", new_state_cities_path(@state) %></p>

これは言語のニュアンスであり、慣れが必要です。私は実際に同じ問題を抱えていました。パスは複数形にする必要があります。また、routes.rbファイルに複数形のバージョンがあることも確認します。次のような行があるはずです。

map.resources :cities

都市ではなく都市を示す行がある場合は、それを都市に変更する必要があります。お役に立てれば。問題が発生した場合に備えて、チェックアウトするもう1つの優れたリソースはfreenodeの#rubyircチャネルです。

于 2010-04-18T07:26:02.600 に答える