dcb*_*dcb 30 ruby haml sinatra pony
我是这三个人的新手,我正在尝试为网站写一个简单的联系表格.我提出的代码如下,但我知道它存在一些基本问题(由于我对sinatra缺乏经验).得到这个工作的任何帮助将不胜感激,我似乎无法弄清楚/找到这类事情的文档.
来自联系页面的haml代码:
%form{:name => "email", :id => "email", :action => "/contact", :method => "post", :enctype => "text/plain"}
%fieldset
%ol
%li
%label{:for => "message[name]"} Name:
%input{:type => "text", :name => "message[name]", :class => "text"}
%li
%label{:for => "message[mail]"} Mail:
%input{:type => "text", :name => "message[mail]", :class => "text"}
%li
%label{:for => "message[body]"} Message:
%textarea{:name => "message[body]"}
%input{:type => "submit", :value => "Send", :class => "button"}
Run Code Online (Sandbox Code Playgroud)
这是我在sinatra的app.rb中的代码:
require 'rubygems'
require 'sinatra'
require 'haml'
require 'pony'
get '/' do
haml :index
end
get '/contact' do
haml :contact
end
post '/contact' do
name = #{params[:name]}
mail = #{params[:mail]}
body = #{params[:body]}
Pony.mail(:to => '*emailaddress*', :from => mail, :subject => 'art inquiry from' + name, :body => body)
end
Run Code Online (Sandbox Code Playgroud)
dcb*_*dcb 46
我想到你们中的任何一个想知道:
HAML:
%form{ :action => "", :method => "post"}
%fieldset
%ol
%li
%label{:for => "name"} Name:
%input{:type => "text", :name => "name", :class => "text"}
%li
%label{:for => "mail"} email:
%input{:type => "text", :name => "mail", :class => "text"}
%li
%label{:for => "body"} Message:
%textarea{:name => "body"}
%input{:type => "submit", :value => "Send", :class => "button"}
Run Code Online (Sandbox Code Playgroud)
和app.rb:
post '/contact' do
name = params[:name]
mail = params[:mail]
body = params[:body]
Pony.mail(:to => '*emailaddress*', :from => "#{mail}", :subject => "art inquiry from #{name}", :body => "#{body}")
haml :contact
end
Run Code Online (Sandbox Code Playgroud)
如果任何人都可以使用此功能,则可能需要使用gmail帐户发送邮件。
post '/contact' do
require 'pony'
Pony.mail(
:name => params[:name],
:mail => params[:mail],
:body => params[:body],
:to => 'a_lumbee@gmail.com',
:subject => params[:name] + " has contacted you",
:body => params[:message],
:port => '587',
:via => :smtp,
:via_options => {
:address => 'smtp.gmail.com',
:port => '587',
:enable_starttls_auto => true,
:user_name => 'lumbee',
:password => 'p@55w0rd',
:authentication => :plain,
:domain => 'localhost.localdomain'
})
redirect '/success'
end
Run Code Online (Sandbox Code Playgroud)
请注意最后的重定向,因此您将需要一个success.haml来向用户指示其电子邮件已成功发送。
嗯,我在irb中尝试了以下方法:
foo = #{23}
Run Code Online (Sandbox Code Playgroud)
当然不会起作用!“#”用于Ruby中的注释,除非它出现在字符串中!它甚至在语法突出显示中被注释掉。您想要的是:
name = "#{params[:name]}"
Run Code Online (Sandbox Code Playgroud)
就像您在解决方案中所做的那样(没有必要,因为它已经是字符串)。
顺便说一句,代码不引发错误的原因如下:
a =
b =
42
Run Code Online (Sandbox Code Playgroud)
将a和b设置为42。您甚至可以做一些奇怪的事情(就像您不小心做的那样),并将变量设置为以这些变量为参数的函数的返回值:
def foo(a,b)
puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
return 42
end
a =
b =
foo(a,b)
Run Code Online (Sandbox Code Playgroud)
将a和b设置为42。
| 归档时间: |
|
| 查看次数: |
42941 次 |
| 最近记录: |