2

我是 Rails 新手,无法将联系表格从“/contacts”移动到“/contact”。很简单,我知道!

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

但是,我似乎无法做一些简单的事情,比如更改 URL 而不会出错。在我学习的过程中,这似乎是我应该能够做的事情......我做了以下更改:

1)更改路线.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”,我在整个项目中进行了搜索,但不存在“联系人”。

任何帮助将不胜感激!谢谢!

红宝石 2.3.3 轨道 5.0.1

4

1 回答 1

0

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

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

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

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

所以最好的建议是真正遵守约定!控制器使用复数形式,将路线设置回原来的样子。

除非您有令人信服的理由违反“约定优于配置”规则,否则您不应该这样做。

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

于 2017-04-08T23:01:06.930 回答