我在Engine的根目录下安装了一个名称相同的控制器
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
坚持使用false url_path,我不知道在哪里可以修复我的模型与控制器的url助手之间的关系:
link_to 'Edit', [:edit, @contact]
NoMethodError: undefined method `edit_contacts_path' for #<#<Class:0x007fc421e17e08>:0x007fc41ca4c8f0>
为什么使用:edit
路径的复数形式?
答案 0 :(得分:2)
link_to 'Edit', [:edit, @contact]
不正确。 Rails从@object
的状态检测到操作。发生的事情是Rails将:edit
解释为命名空间。
link_to 'Edit', [:edit, @contact]
我不确定您是否可以通过这种方式生成编辑多态路由。如果可以,:edit
应该在资源之后。示例(我还没试过)
link_to 'Edit', [@contact, :edit]
我建议你使用显式路由名称
link_to edit_contact_path(@contact)
我认为您使用多态路由没有任何优势。