我有一个网页,上面有两个表格。 有一个普通的联系表格和一个购物车,如客户的响应部分,供销售人员根据客户的选择做出回应。
我对Ruby一无所知,而且我很难同化这个应该如何处理指向Sinatra电子邮件模板的路由。 代码如下......
**** Mailer.rb ****
require 'sinatra'
require 'pony'
Pony.options = {
via: :smtp,
via_options: {
openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE,
address: 'mail.myserver.com',
port: '587',
user_name: 'test@myserver.com',
password: '********',
authentication: :plain,
domain: "mail.myserver.com" # the HELO domain provided by the client to the server
}
}
class Mailer < Sinatra::Base
post '/contact' do
options = {
from: "test@myserver.com",
to: 'client@clientaddress.com',
subject: "Contact Form",
body: "#{params['name']} <#{params['email']}> \n" + params['message']
}
Pony.mail(options)
redirect '/'
end
post '/build-tool' do
options = {
from: "test@myserver.com",
to: 'client@clientaddress.com',
subject: "Custom Build Form",
body: "#{params['name']} <#{params['email']}> \n" + params['message']
}
Pony.mail(options)
redirect '/'
end
end
***** HTML Form One *****
<form class="form-horizontal" method="POST" action="/contact">
contact information inputs
</form>
***** HTML Form Two *****
<form class="form-horizontal" method="POST" action="/build-tool">
build tool inputs
</form>
***** Config.rb *****
map '/contact' do
run Mailer
end
map '/build-tool' do
run Mailer
end
答案 0 :(得分:0)
Sinatra直接指出路线,所以如果你向'/ contact'发出POST请求,它会调用post '/contact'
定义中的代码,所以你不必做任何你做的事情'在config.rb
做的。
当您redirect '/'
时,这意味着服务器需要定义根路由,这在您的类定义中是缺失的。
HTML标记进入view,通过Sinatra呈现。
这些是需要改变的三件事。首先,我们定义一个/
路由,它呈现我们需要的HTML表单元素:
# mailer.rb
require 'sinatra/base' # note the addition of /base here.
require 'pony'
# pony options code same as before
class Mailer < Sinatra::Base
get '/' do
erb :index
end
# post routes same as before
end
HTML从视图模板呈现。默认情况下,Sinatra将在views/
目录中查找视图。
# views/index.erb
<form class="form-horizontal" method="POST" action="/contact">
contact information inputs
submit button
</form>
<form class="form-horizontal" method="POST" action="/build-tool">
build tool inputs
submit button
</form>
ERB是一种与Ruby语言捆绑在一起的模板语言,因此您无需安装任何新的gem。还有更多languages listed in the documentation.
而config.ru
将如下所示:
# config.ru
# Note the file change. This is called a Rackup file. config.rb is
# a more general purpose file used by many libraries, so it's better
# to keep this separate.
require_relative 'mailer.rb'
run Mailer
答案 1 :(得分:0)
这里的问题是每个表单对应一个特定的路由,将表单数据发送到该操作。换句话说,“表单一”将POST
请求中包含的所有输入字段发送到/contact
,“表单二”将POST
中的所有输入字段发送到{{1} }。
我的建议是将两个表单合并为一个表单,然后只使用页面样式使其看起来像两个。这样您就可以将所有输入字段一起提交给您的Sinatra应用程序,并且您可以发送最适用于输入内容的任何邮件。