2010-04-18 57 views
1

我是一個新手Rails開發誰獲得試圖訪問我的CityController「新」動作時出現以下錯誤:Rails的「NoMethodError」與子資源

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> 

當我運行「耙:路線」它說,這是一個合法的途徑......

更多背景,這裏是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 error "NoMethodError" - My first ruby app)。然而,從我所能看到的情況來看,情況並非如此。這裏是我的資源,如何看待我的路線文件:

resources :states do 
    resources :cities 
end 

我能得到它的工作時,他們沒有子資源,但我真的需要他們保持作爲子資源爲我的未來與應用程序的計劃。任何幫助將非常感激,因爲我一直在這個絞盡腦汁想了更多的時間比我不願意承認...謝謝! (不確定這個問題,但我運行的是最新版本的Rails 3 beta2)。

回答

2

你的問題來自你上面的視圖的第2行,特別是form_for聲明。正如你指出的,state_city_path是一個有效的路徑,但是現在,你的表單不使用這個路徑,它使用的是city_path。在使用嵌套資源時,您需要根據該嵌套定義所有內容。你的form_for應該看起來像form_for([@state, @city]) do(我不記得確切的語法)。

您的後續答案將起作用,但並不完全是最好的解決方法,除非您希望能夠查看那些不在州內的城市。

希望這會有所幫助。

PS。 form_for documentation非常好,並且在資源中使用它時顯示了一些很好的示例。

+0

謝謝!我回去做了「正確的方式」(正如你所建議的那樣),而且它不需要兩次定義資源就可以工作。 – Tchock 2010-05-16 01:53:06

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 

如果您有一條說城市而不是城市的線路,您應該將其更改爲城市。希望這可以幫助。另一個很好的資源是freenode上的#ruby irc頻道,如果遇到更多問題。

+0

這似乎沒有工作。當我進入狀態顯示頁面時,它給了我一個沒有方法錯誤的城市。我想知道如果我只是想弄清楚嵌套資源的方法。感謝您的提示,儘管... – Tchock 2010-04-18 15:13:07

+0

也嘗試將城市改爲路徑行中的城市,有時複數的變化無法正常工作。 – mpd 2010-04-18 16:35:28

1

沒關係 - 我想我已經想通了......我需要將城市定義爲一種資源,以及各州的子資源。現在它似乎工作。

+0

這個男人也在竊聽我。謝謝你的提示! – 2010-11-30 08:03:54