Rails模型的错误url帮助器

时间:2015-02-13 13:16:28

标签: ruby-on-rails activemodel

我在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路径的复数形式?

1 个答案:

答案 0 :(得分:2)

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)

我认为您使用多态路由没有任何优势。

相关问题