2010-09-11 30 views
31

Tôi muốn làm cho một số liên lạc chúng tôi hình thành trong Rails 3 với các lĩnh vực sau:Liên hệ chức năng trong Rails 3

  • Tên
  • Email
  • tiêu đề tin nhắn
  • nhắn thân

Các tin nhắn đã đăng được dự định sẽ chuyển đến địa chỉ email của tôi, vì vậy tôi không cần lưu trữ các thư trong cơ sở dữ liệu. Tôi có phải sử dụng ActionMailer, bất kỳ đá quý hoặc plugin nào cho nó không?

+1

Bạn có thể quan tâm đọc về hình thức Liên Restful cũng như: http: // robot. thinkbot.com/post/159807170/restful-contact-forms – sivabudh

+0

Oh cảm ơn, nó rất hữu ích :) – rodrigoalves

Trả lời

66

This hướng dẫn là một ví dụ tuyệt vời - và đó là Rails 3

Cập nhật:

This article là một ví dụ tốt hơn so với cái tôi đăng tải trước đó, hoạt động hoàn hảo

Cập nhật Thứ hai:

Tôi cũng khuyên bạn nên hợp nhất một số kỹ thuật được nêu trong this railscast trên đá quý active_attr, nơi Ryan Bates hướng dẫn bạn qua quá trình thiết lập mô hình không có tab cho trang liên hệ.

thứ ba Cập nhật:

tôi đã viết của riêng tôi test-driven blog post về nó

+1

Đây là lỗi thời và sử dụng một mô hình hỗ trợ không cần thiết. Mặc dù vẫn +1 khi nó cải thiện sự hiểu biết của tôi :) –

+0

Đồng ý Abe, tôi đã thêm một số liên kết mới, v.v. – stephenmurdoch

+0

Bạn có biết làm cách nào để i18n-ize các attr_accessors được nêu trong mô hình của bài viết bạn đã liên kết tới không? Tôi đã xác định các điều sau trong tệp .yml, nhưng nó không được chú ý trong thông báo lỗi theo. 'de.activerecord.attributes.message.subject: Betreff' – user569825

1

tôi không thể làm cho đoạn code ví dụ công việc này và tôi nghĩ rằng nó làm cho mọi thứ một chút phức tạp kể từ khi tạo của bạn một mô hình.

Anywat, tôi đã thực hiện một hình thức tiếp xúc làm việc và viết blog về nó .. văn bản là trong portuguese nhưng mã chính nó là (chủ yếu) bằng tiếng Anh http://www.rodrigoalvesvieira.com/formulario-contato-rails/

Lưu ý: Tôi sử dụng sendmail, không SMTP.

9

Tôi đã cập nhật triển khai càng gần với đặc tả REST.

Thiết lập cơ bản

Bạn có thể sử dụng mail_form gem. Sau khi cài đặt, bạn chỉ cần tạo một mô hình có tên là Message tương tự như được mô tả trong tài liệu.

# app/models/message.rb 
class Message < MailForm::Base 
    attribute :name,   :validate => true 
    attribute :email,   :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i 
    attribute :message_title, :validate => true 
    attribute :message_body, :validate => true 

    def headers 
    { 
     :subject => "A message", 
     :to => "[email protected]", 
     :from => %("#{name}" <#{email}>) 
    } 
    end 
end 

Điều này sẽ cho phép bạn kiểm tra sending emails via the console.

Trang liên hệ

Để tạo trang liên hệ riêng biệt, hãy làm như sau.

# app/controllers/messages_controller.rb 
class MessagesController < ApplicationController 
    respond_to :html 

    def index 
    end 

    def create 
    message = Message.new(params[:contact_form]) 
    if message.deliver 
     redirect_to root_path, :notice => 'Email has been sent.' 
    else 
     redirect_to root_path, :notice => 'Email could not be sent.' 
    end 
    end 

end 

Thiết lập các định tuyến ..

# config/routes.rb 
MyApp::Application.routes.draw do 
    # Other resources 
    resources :messages, only: [:index, :create] 
    match "contact" => "messages#index" 
end 

Chuẩn bị một hình thức một phần ..

// app/views/pages/_form.html.haml 
= simple_form_for :contact_form, url: messages_path, method: :post do |f| 
    = f.error_notification 

    .form-inputs 
    = f.input :name 
    = f.input :email, label: 'Email address' 
    = f.input :message_title, label: 'Title' 
    = f.input :message_body, label: 'Your message', as: :text 

    .form-actions 
    = f.submit 'Submit' 

Và làm cho hình thức trong một cái nhìn ..

// app/views/messages/index.html.haml 
#contactform.row 
    = render 'form' 
+0

Tôi thử điều này, nhưng, nơi bạn đặt cấu hình SMTP của mình. Và biểu mẫu liên hệ này có thể hoạt động trong môi trường cục bộ không? – Stanmx

+0

@Stanmx Cấu hình SMTP đi vào 'config/environment/development.rb' hoặc' ../ production.rb'. [Tài liệu mô tả thiết lập cho GMail] (http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail) cũng hoạt động khi chạy trên máy chủ cục bộ. – JJD

+0

Cảm ơn bạn @ JJD, im bắt đầu bằng một ví dụ khác, nhưng tôi gửi cho tôi, tôi đã nhận được: đối số sai (Fixnum)! (Dự kiến ​​loại OpenSSL :: SSL :: SSLContext) – Stanmx

-1

Bạn có thể sử dụng Liên hệ đá quý thông qua liên kết này: https://github.com/JDutil/contact_us Các tài liệu rõ ràng và bạn có thể sử dụng một cách đơn giản.

Các tính năng:

  1. Validation
  2. dễ dàng/Thêm xóa trường
  3. cấu hình đơn giản
Các vấn đề liên quan