Pregunta

Soy nuevo a los tres, y yo estoy tratando de escribir un sencillo formulario de contacto para un sitio web. El código que he llegado con está por debajo, pero sé que hay algunos problemas fundamentales con que (debido a mi falta de experiencia con Sinatra). Cualquier ayuda en conseguir este trabajo sería apreciado, me parece que no puede averiguar / encontrar la documentación para este tipo de cosas.

Código haml desde la página de contacto:

%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"}

Y aquí está mi código en app.rb de Sinatra:

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
¿Fue útil?

Solución

Lo he descubierto por cualquiera de usted que se pregunta:

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"}

Y el 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

Otros consejos

En caso de que cualquiera puede usar esto, aquí es lo que puede que tenga que utilizar su cuenta de Gmail para enviar correo.

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

Tenga en cuenta que la redirección al final, por lo que tendrá un success.haml para indicar al usuario que su correo electrónico fue enviado con éxito.

Uhmm, he intentado en el IRB lo siguiente:

foo = #{23}

Por supuesto, no lo puedo trabajar! el '#' es para comentarios en Ruby a menos que ocurra en una cadena! Su incluso comentó en el resaltado de sintaxis. Lo que quería era:

name = "#{params[:name]}"

como lo hizo en su solución (que no es necesario, como ya es una cadena).

Por cierto, la razón por la que el código no emite un error es el siguiente:

a =
b =
42

establecerá a y b a 42. Incluso se puede hacer algunas cosas extrañas (como lo hizo accidentalmente) y establecer las variables con el valor de retorno de una función que toma como parámetros de estas variables:

def foo(a,b)
    puts "#{a.nil?} #{b.nil?}" #outputs 'true true'
    return 42
end
a =
b =
foo(a,b)

establecerá a y b para 42.

# {} es la interpolación que se utiliza en el interior "". Sólo usarlo fuera para una asignación variable no va a funcionar.

Sería más probable que se utilicen como esto:

number_of_people = 15 

Puts "There are #{number_of_people} scheduled tonight" 

He creado un ejemplo de esto en dos partes que está disponible en GitHub. La aplicación formulario de registro está aquí: de registro-form-heroku y un ejemplo de la página web estática que interactúa con esto está aquí: estática-web-a-s3-ejemplo . La aplicación forma se construye utilizando Sinatra y está listo para desplegar directamente en Heroku. El sitio estático está listo para desplegar directamente a S3 y Amazon CloudFront utilizar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top