2017-04-08 24 views
2

얻기없이 문의 양식에 대한 URL을 이동 할 수 없습니다 나는 레일에 새로운 오전 나는 "/ 연락처" "/ 접촉"까지 문의 양식을 이동하는 데 문제가 있어요. 간단하게, 나는 알고있다! 루비 : NoMethodError

나는 다음과 같은 가이드를 따라하고 작업을 다 가지고 : 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] 
되었다 내가 배우고,이 내가 할 수 있어야 뭔가처럼 보였다 ... 나는 다음과 같이 변경했다 업데이트 첫 번째 리 변경 "응용 프로그램/컨트롤러/contacts_controller.rb가"에서 "응용 프로그램/컨트롤러/contact_controller.rb"

3) 명칭 변경

2) "contact_controller.rb"의 NE는 :

class ContactsController < ApplicationController 

는 "앱 /보기/콘택트 /"내지 뷰 이동

class ContactController < ApplicationController 

4) 되었다 "앱 /보기/접촉 /"

나는 다음과 같은 오류 얻을 : 어딘가에 "contacts_path는"이 생각

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

를, 내가 검색 한 전체 프로젝트에서 "연락처"가 존재하지 않습니다.

도움이 될 것입니다. 고맙습니다!

루비 2.3.3 레일 5.0.1

+0

서버를 다시 시작 했습니까? – radubogdan

+0

@radubogdan 예. 나는 그것을 몇 번 시도했다.강조하는 행은 다음과 같습니다.'<% = [email protected], : html => {: class => 'form-horizontal'} do | f | %>' – S4NK

답변

0

문제는 개체 (새 레코드)를 유지하지 않는 form_for @object의 기본 경로는 항상 objects_path 것입니다. 명시 적으로 URL, 뭔가 같은 ...

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

을 명시해야하지만 당신이 그들을 편집하려고 할 때 기존 연락처에 대한 엉망 형태로 것입니다.

필요한 두 개의 다른 URL을 처리하려면 <% if @contact.new_record? %><% else %><% end %>을 처리해야합니다.

그래서 최고의 추천 정말 규칙을 따라야합니다! 컨트롤러에 대해 복수형을 사용하고 경로를 이전대로 되돌려 놓습니다.

"컨벤션 오버 규칙"규칙을 위반할만한 강력한 이유가없는 한 그렇게해서는 안됩니다.

워드 프로세서에서 사용하는 기본 URL을 설명합니다. https://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

+0

이것은 트릭을 만들었습니다! 그리고'form_for @ object'와 'convention over configuration'에 대한 정보를 가져 주셔서 감사합니다. 이것은 모두 새로운 것이므로 매우 감사하겠습니다! 나는 대답을 표결했다 ... 아직 충분한 평판이 없다. :) – S4NK

+0

기꺼이 도와 드리겠습니다! 대답을 아직 "투표"할 수는 없지만 대답을 "수락"할 수있는 옵션이 있어야합니다 ... 옵션은 내 대답의 바로 왼쪽에 있습니다. 네가 그렇게 할 수 있다면 좋을 것이다. – SteveTurczyn

+0

완료! 고맙습니다! – S4NK