불필요한 테이블 생성을 피하기 위해 activemodel을 사용하여 '저에게 연락하십시오'양식을 작성하려고합니다. 나는 문의 양식을 제출하면 레일은 다음과 같은 경로에도 불구하고, 오류 No route matches [POST] "/contact/new"
를 반환레일스 activemodel & actionmailer 저에게 연락주세요 경로가 일치하지 않습니다 [POST]
설정은/routes.rb
resources :contact, only: [:new, :create]
rake routes
반환 다음 ...
contact_index POST /contact(.:format) contact#create
new_contact GET /contact/new(.:format) contact#new
컨트롤러/contact_controller을 .rb
class ContactController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.valid?
ContactMailer.contact_submit(@contact).deliver
flash[:notice] = "Thank you for your email, I'll respond shortly"
redirect_to new_contact_path
else
render :new
end
end
end
메일러/cont act_mailer.rb
class ContactMailer < ActionMailer::Base
default to: ENV[EMAIL_ADDRESS]
def contact_submit(msg)
@msg = msg
mail(from: @msg.email, name: @msg.name, message: @msg.message)
end
end
모델/contact.rb
class Contact
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :message
validates_format_of :email, :with => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
validates_presence_of :message
validates_presence_of :name
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
보기 당신은 new_contact_path
(/contact/new
)에 양식을 제출하고
<%= form_for @contact, url: new_contact_path do |f| %>
<div class="form-inputs">
<div class="form-group">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="form-group">
<%= f.label :email %><br>
<%= f.email_field :email %>
</div>
<div class="form-group">
<%= f.label :message %><br>
<%= f.text_area :message %>
</div>
</div>
<div class="form-actions">
<%= f.submit %>
</div>
<% end %>
정말로 하나의 리소스를 원한다면 대신'resource' 매크로를 사용하십시오. 올바른 경로 이름을 생성합니다. – max