Rails 上的 Ruby:无法在不获取 NoMethodError 的情况下移动联系表的 URL

Ruby on Rails: Cannot Move URL for Contact Form Without Getting NoMethodError

我是 rails 的新手,我无法将联系表从“/contacts”移至“/contact”。很简单,我知道!

我按照以下指南操作,一切正常: https://rubyonrailshelp.wordpress.com/2014/01/08/rails-4-simple-form-and-mail-form-to-make-contact-form/

但是,我似乎无法在不出错的情况下做一些像更改 URL 这样简单的事情。在我学习的过程中,这似乎是我应该能够做到的……我进行了以下更改:

1) 已更改 routes.rb:

match '/contacts', to: 'contacts#new', via: 'get'
resources "contacts", only: [:new, :create]

成为

match '/contact', to: 'contact#new', via: 'get'
resources "contact", only: [:new, :create]

2) 将 "app/controllers/contacts_controller.rb" 重命名为 "app/controllers/contact_controller.rb"

3) 更新并更改了 "contact_controller.rb" 的第一行:

class ContactsController < ApplicationController 

成为

class ContactController < ApplicationController

4) 将视图从 "app/views/contacts/" 移动到 "app/views/contact/"

我收到以下错误:

NoMethodError in Contact#new
undefined method `contacts_path' for #<#<Class:0xa0e4500>:0xa0efb28>
Did you mean?  contact_path

以为某处有 "contacts_path",我在整个项目中进行了搜索,但不存在 "contacts"。

如有任何帮助,我们将不胜感激!谢谢!

Ruby2.3.3 Rails5.0.1

问题是当对象未持久化(新记录)时 form_for @object 的默认路径始终是 objects_path。您必须明确说明 url,例如...

<%= simple_form_for @contact, as: :contact, url: '/contact', html: { class: "new_contact", id: "new_contact" } do |f| %>

但是当您尝试编辑它们时,这会弄乱现有联系人的表单。

您必须执行 <% if @contact.new_record? %><% else %><% end %> 来处理所需的两个不同 URL。

所以最好的建议就是真的循规蹈矩!对控制器使用复数形式,将路线设置回原来的样子。

除非您有令人信服的理由违反 "convention over configuration" 规则,否则您不应该这样做。

文档解释了使用的默认 URL。 https://apidock.com/rails/ActionView/Helpers/FormHelper/form_for