抱歉,如果这是一个愚蠢的问题,这是我的第一个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!你是我唯一的希望!
答案 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
时,您告诉应用程序只有一个地理围栏资源,并且它不是集合。您将获得show
,update
,create
,new
,但不会index
- 并且不会使用id
值,因为只有一个资源。 (此处show
操作的路径为/geofence
如果您使用resources :geofences
(请注意复数化),那么您已经定义了一组资源,/geofences
现在将为您提供index
操作,您的网址助手将正常使用show动作渲染/geofences/3
。
希望这可以帮助您理解为什么复数形式对于这种资源是必要的:)