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]
我不确定您能否以这种方式生成编辑多态路由。如果可以,:edit
应该在资源之后。示例(我没试过)
link_to 'Edit', [@contact, :edit]
我建议你使用明确的路由名称
link_to edit_contact_path(@contact)
我看不出在你的情况下使用多态路由有任何优势。
我在同名引擎的根目录安装了一个控制器
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]
我不确定您能否以这种方式生成编辑多态路由。如果可以,:edit
应该在资源之后。示例(我没试过)
link_to 'Edit', [@contact, :edit]
我建议你使用明确的路由名称
link_to edit_contact_path(@contact)
我看不出在你的情况下使用多态路由有任何优势。