我们正在尝试使用 Rails MailForm Gem 为我们的应用程序中的每个露营地实例生成一个联系表单,以便当用户完成表单时,电子邮件会直接从表单发送给露营地所有者。
我们在 routes.rb 中的站点资源中嵌套了联系人资源 - 以确保表单位于路径 - localhost:3000/sites/1/contacts/new 而不是 localhost:3000/contacts/new。
我们的应用程序中是否缺少某些关键,或者我们应该以不同的方式解决这个问题?建议表示赞赏。
我们的代码是
resources :campsites do
resources :contacts
end
但是,我们在尝试查看此路径时收到错误消息。报告的错误状态
undefined method "contacts_path' for #<#<Class:0x007ff0ed9527d0>:0x007ff0ed950de0>
,我们不确定为什么。
我们一直在关注这个演练(https://rubyonrailshelp.wordpress.com/2014/01/08/rails-4-simple-form-and-mail-form-to-make-contact-form/)。
我们已经查看了 gem 和 Rails 文档,但经过多次尝试后仍然无法查看表单,我们不确定这是否与我们尝试在应用程序中查看表单的位置有关。
运行 localhost:3000/sites/1/contacts/new 时,我们收到以下错误:
NoMethodError in Contacts#new
Showing /Users/elinnet/makers/week11/campFri/app/views/contacts/new.html.erb where line #4 raised:
undefined method 'contacts_path' for #<#<Class:0x007ff0ed9527d0>:0x007ff0ed950de0>
Extracted source (around line #4):
(1) <h3>Send A message to Us</h3>
(2) <%= simple_form_for @contact, :html => {:class => 'form-horizontal' } do |f| %>
(3) <%= f.input :name, :required => true %>
(4) <%= f.input :email, :required => true %>
(5) <%= f.input :message, :as => :text, :required => true %>
联系人的控制器是:
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
flash.now[:notice] = 'Thank you for your message. We will contact you soon!'
else
flash.now[:error] = 'Cannot send message.'
render :new
end
end
end
联系人的模型是:
class Contact < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, :captcha => true
def headers
{
:subject => "My Contact Form",
:to => "your_email@example.org",
:from => %("#{name}" <#{email}>)
}
end
end
项目 Github 参考为:https ://github.com/elinnet/camping.git