Rails 3 edit_path方法不起作用

时间:2011-03-19 01:27:51

标签: ruby-on-rails ruby-on-rails-3 rest

抱歉,如果这是一个愚蠢的问题,这是我的第一个Rails3项目...

出于某种原因,这是<%= link_to 'edit', edit_geofence_path(geofence) %>

呈现为<a href="/geofence/edit.2">edit</a>(我的地理围栏的ID为2)。

<%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete %>

呈现为<a href="/geofence?id=2" data-confirm="You sure?" data-method="delete" rel="nofollow">delete</a>

可能没问题,但点击链接会在日志Started GET "/geofence?id=2"中生成此内容。所以,不要删除,只需要GET。

我的routes.rb文件只是resource :geofence

在相关说明中,由于某种原因,地理围栏的默认操作是“show”。所以/ geofence / DOES不调用索引方法,它调用show方法。我认为这也一定是错的。

我现在已经完成了对这个应用程序的诅咒,我要花一天时间来冷静下来,并希望明天晚上让这个简单的SCAFFOLD工作......帮助我,stackoverflow!你是我唯一的希望!

3 个答案:

答案 0 :(得分:2)

<%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete %>

应该是:

<%= link_to 'delete', {:action=>'destroy', :id=>geofence}, :confirm=>"You sure?", :method=> :delete, :remote => true %>

没有:remote =&gt;是的,点击不是由javascript处理的。

在routes.rb文件中,您应将其定义为:

resources :geofence

将其设置为资源意味着只有一个,并且会导致很多奇怪的行为。

答案 1 :(得分:0)

作为旁注,要完成 ctide 回答,我建议您使用复数形式的控制器名称作为约定。听起来更自然:

resources :geofences

routes.rb 文件中。

这是一个previous StackOverflow question,关于使用复数形式作为控制器的约定。

答案 2 :(得分:0)

在路由文件中使用resource :geofence时,您告诉应用程序只有一个地理围栏资源,并且它不是集合。您将获得showupdatecreatenew,但不会index - 并且不会使用id值,因为只有一个资源。 (此处show操作的路径为/geofence

如果您使用resources :geofences(请注意复数化),那么您已经定义了一组资源,/geofences现在将为您提供index操作,您的网址助手将正常使用show动作渲染/geofences/3

希望这可以帮助您理解为什么复数形式对于这种资源是必要的:)