【问题标题】:Why delete method gives me wrong path? with为什么删除方法给了我错误的路径?和
【发布时间】:2012-03-03 20:06:53
【问题描述】:

我有简单的删除链接:

= link_to "Delete", messages_path(message.id), :method => :delete

给我错误:No route matches [DELETE] "/messages.316"

如何解决这个问题?

我有 ruby​​ 1.9.3p0 Rails 3.1.1

我的路线.rb

  resources :messages do
    collection do
      get :outbox
    end
  end

当我将其更改为 message_path 时,我收到 wrong number of arguments (0 for 1) -> full_trace: https://gist.github.com/1967988
-> 所有文件:https://gist.github.com/1967994

   outbox_messages GET    /messages/outbox(.:format)          {:action=>"outbox", :controller=>"messages"}
           messages GET    /messages(.:format)                 {:action=>"index", :controller=>"messages"}
                    POST   /messages(.:format)                 {:action=>"create", :controller=>"messages"}
        new_message GET    /messages/new(.:format)             {:action=>"new", :controller=>"messages"}
       edit_message GET    /messages/:id/edit(.:format)        {:action=>"edit", :controller=>"messages"}
            message GET    /messages/:id(.:format)             {:action=>"show", :controller=>"messages"}
                    PUT    /messages/:id(.:format)             {:action=>"update", :controller=>"messages"}
                    DELETE /messages/:id(.:format)             {:action=>"destroy", :controller=>"messages"}

编辑:How to destroy polymorphic model? Method destroy missing argument相关

【问题讨论】:

  • 你的 routes.rb 文件有什么?
  • rake routes 的输出是什么?你的Message 模型是什么样的?
  • DELETE /messages/:id(.:format) {:action=>"destroy", controller=>"messages"} 我正在使用这个 gem:github.com/LTe/acts-as-messageable/blob/master/lib/…

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


【解决方案1】:

你需要说message_path(单数),因为它是单个消息的路径:

link_to "Delete", message_path(message.id), :method => :delete

【讨论】:

  • @regedarek 好的……我的回答有问题吗?不需要你的控制器代码。
  • 是的,当我使用您答案中的代码时,我收到此错误:wrong number of arguments (0 for 1) full tr​​ace: gist.github.com/1968069
  • @regedarek 请查看我对您的问题的评论并提供我在那里要求的其他信息。
  • 嗯,undefined method `model_name' for Fixnum:Class
  • @regedarek 抱歉,您需要通过 message 而不是 message.id。我已经更新了我的答案以反映这一点。
【解决方案2】:

您使用了错误的 URL 帮助程序。只需将message 变量作为link_to 的第二个参数传递。

例子:

= link_to "Delete", message, :method => :delete

【讨论】:

【解决方案3】:

你想要message_path(message) 而不是messages_path。 messages_path 返回索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多