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
我是 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