关于路线定义的问题

时间:2011-01-31 08:31:05

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

我已在 routes.rb

中定义了资源
resources :cars

在我的视图(index.html.haml)中,我定义了一个删除一个项目的链接:

%td
  =link_to(t("delete"), car_post_path(car))

我得到了NoMethodError: 未定义的方法`car_post_path'

为什么呢? (我正在使用Rails 3)

4 个答案:

答案 0 :(得分:1)

你的意思是你要删除一个汽车对象,而不是一个属于汽车的邮政对象,对吗?

如果属实,则应使用car_path(car)代替car_post_path(car)

有两种方法:

# 1
%td= link_to t("delete"), car_path(car), :confirm => "Are you sure?", :method => :delete

# 2
%td= link_to t("delete"), car, :confirm => "Are you sure?", :method => :delete

由于这是一个RESTful资源,在#2中使用car传递:method => :delete对象就足以告诉rails使用car_path(car)。所以这两者具有相同的效果。

答案 1 :(得分:0)

<%= link_to 'DELETE', car, :confirm => 'Are you sure?', :method => :delete %>

请浏览this指南。

答案 2 :(得分:0)

将代码更改为以下

  

%TD
  的link_to =(T( “删除”),   car_path(汽车))

因为你没有将与ruote的任何关系与你的代码相关联。所以检查它..

答案 3 :(得分:0)

我看到这个问题还有其他好的答案。我只想补充一点,如果你想列出应用程序中定义的路由,你应该启动:

...$ rake routes 

从命令行获取类似

的内容
        speakers GET    /speakers(.:format)                               {:action=>"index", :controller=>"speakers"}
                 POST   /speakers(.:format)                               {:action=>"create", :controller=>"speakers"}
     new_speaker GET    /speakers/new(.:format)                           {:action=>"new", :controller=>"speakers"}
    edit_speaker GET    /speakers/:id/edit(.:format)                      {:action=>"edit", :controller=>"speakers"}
         speaker GET    /speakers/:id(.:format)                           {:action=>"show", :controller=>"speakers"}
                 PUT    /speakers/:id(.:format)                           {:action=>"update", :controller=>"speakers"}
                 DELETE /speakers/:id(.:format)                           {:action=>"destroy", :controller=>"speakers"}

因此,如果您使用_path_url(例如)edit_speaker后缀,您将获得edit_speaker_pathedit_speaker_url作为可调用方法的名称你的路线。