Rails 模型的假 url 助手

False url helper for Rails Model

我在同名引擎的根目录安装了一个控制器

module Contacts
  class ContactsController < ApplicationController
   ...
  end
end

Contacts::Engine.routes.draw do
  root 'contacts#index'
  resources :contacts, :path => '/'    
end

所以我得到了预期的路线:

         root GET    /                   contacts/contacts#index
     contacts GET    /                   contacts/contacts#index
              POST   /                   contacts/contacts#create
  new_contact GET    /new(.:format)      contacts/contacts#new
 edit_contact GET    /:id/edit(.:format) contacts/contacts#edit
      contact GET    /:id(.:format)      contacts/contacts#show

但是我的模型有一个小问题:

module Contacts
  class Contact
    include ActiveModel::Model 
    include ActiveModel::Serialization
    ...
  end
end

看起来我的 link_to 坚持使用错误的 url_path,我不确定在哪里可以修复我的模型和控制器的 url 助手之间的关系:

link_to 'Edit', [:edit, @contact]
NoMethodError: undefined method `edit_contacts_path' for #<#<Class:0x007fc421e17e08>:0x007fc41ca4c8f0>

为什么使用 :edit 路径的复数形式?

link_to 'Edit', [:edit, @contact] 不正确。 Rails 从 @object 的状态检测动作。发生的事情是 Rails 将 :edit 解释为命名空间。

link_to 'Edit', [:edit, @contact]

参见polymorphic documentation

我不确定您能否以这种方式生成编辑多态路由。如果可以,:edit 应该在资源之后。示例(我没试过)

link_to 'Edit', [@contact, :edit]

我建议你使用明确的路由名称

link_to edit_contact_path(@contact)

我看不出在你的情况下使用多态路由有任何优势。