【问题标题】:No route matches but created没有路线匹配但已创建
【发布时间】:2016-05-24 12:46:28
【问题描述】:

我花了很多时间,但我不知道如何解决这个问题。

我需要发送 PUT 请求,我想通过单击复选框使用 ajax 来完成它

我的 HAML

- subcate.products.each do |product|
  = check_box_tag 'published', product.id, product.published, id: '',                             |
    data: {                                                                                       |
      remote: true,                                                                               |
      url: url_for(controller 'products', action: :set_published, id: product.id, method: 'PUT'), |

    }

我的路线

  namespace :admin do
    resources :categories
    resources :subcategories
    resources :posts

    resources :products do
      resources :images, only: [:create, :destroy]
      put 'set_published', to: 'products#set_published'
    end
  end

我的控制器

class Admin::ProductsController < AdminController
  before_action :set_product, only: [:show, :edit, :update, :destroy]

  def set_published
    "test"
  end

end

当我输入时

rake routes 

我明白了

  admin_product_set_published     PUT     /admin/products/:product_id/set_published(.:format)        admin/products#set_published

我的复选框在主管理页面上,当我想进入时,我得到了

No route matches {:action=>"set_published", :controller=>"admin/products", :id=>49, :method=>"PUT"}

但我尝试从控制台测试控制器

Admin::ProductsController.new.set_published

我明白了

=> "test"

我不知道路线有什么问题

enter image description here

【问题讨论】:

    标签: ruby-on-rails ruby controller routes


    【解决方案1】:

    rake routes 告诉您它需要 product_id

    /admin/products/:product_id/set_published(.:format)
    

    但是在url_for 中你提供了一个id

    url_for(controller 'products', action: :set_published, id: product.id, method: 'PUT')
    

    只需将其更改为(我建议使用路径方法):

    admin_product_set_published_path(product_id: product.id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2023-03-12
      • 2016-02-04
      相关资源
      最近更新 更多