2010-04-18 56 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