2010-01-07 44 views
29

Tôi muốn gửi email từ bảng mỗi đêm vào lúc nửa đêm, vì vậy tôi đã tạo mô hình để theo dõi tất cả các liên lạc được gửi. Cửa hàng mô hình Communication có chữ cái này đến, từ và nội dung của thư được gửi dưới dạng html. Người dùng nhập một tiêu chí để phù hợp cho người mà thư được dự định: tiểu bang, quốc gia, màu sắc yêu thích, và do đó trả về danh sách các kết quả phù hợp có thể chấp nhận.Hiển thị chế độ xem Rails thành chuỗi cho email

Danh sách các đối sánh có thể chấp nhận này được lặp lại và một Giao tiếp mới được tạo cho mỗi. Làm cách nào để hiển thị nội dung của chế độ xem một phần thành chuỗi để lưu trữ trong cơ sở dữ liệu để phân phối vào lúc nửa đêm.

@communication = Communication.new(params[:communication]) 
@communication.body = //Render Partial with local variables to string here 

ngày 08 tháng 1 năm 2010: tôi đã thực hiện các giải pháp của neutrino đề xuất, và mã của tôi trông như thế này:

@communication.message_body = render_to_string(
    :partial => "letters/small_letter", 
    :locals => { :quote => @quote}) 

Hạn chế để phương pháp này là nó đòi hỏi một ngữ cảnh để nó phải được trả lại bên trong một bộ điều khiển, các quy tắc này tạo ra email bằng cách sử dụng một tệp cào. Như những người khác đã chỉ ra cách tiếp cận của việc sử dụng một mô hình truyền thông có thể giới thiệu một số phức tạp không cần thiết. Tại thời điểm này vì các điều kiện tôi sử dụng để tạo danh sách người nhận không bao giờ được lưu trữ, tôi đã chọn tiếp tục sử dụng mô hình truyền thông.

Trả lời

39

As (gần như) luôn trong Rails, có một phương pháp cho rằng: ActionController::Base#render_to_string

Trong Rails 3, phương pháp này đã được chuyển đến AbstractController::Rendering#render_to_string.

+0

Điều này yêu cầu phải có ngữ cảnh chế độ xem đang hoạt động, theo như tôi biết và không hoạt động cho các tác vụ rake, trong số những thứ khác. – tadman

+0

Tôi đang hiển thị một phần từ Bộ điều khiển truyền thông và do đó tôi có ngữ cảnh. Giải pháp này hoạt động tuyệt vời, cảm ơn bạn. – nixterrimus

+2

trông giống như phương pháp không được chấp nhận – avioing

-1

Bạn đã thử action mailer? Nó sẽ giúp hiển thị các khung nhìn của bạn và cung cấp hỗ trợ bản ghi hoạt động.

11

Bạn có thể muốn xem xét kỹ thuật để làm cho một mẫu bên ngoài của một bộ điều khiển, chẳng hạn như:

http://geek.swombat.com/rails-rendering-templates-outside-of-a-contro

Điều đó đang được nói, nó có thể là tốt hơn để tận dụng được xây dựng trong email gửi lớp ActionMailer :: Base có thể hiển thị mẫu cho bạn. Lưu trữ các thông số trong mô hình Giao tiếp của bạn có lẽ tốt hơn lưu trữ HTML chưa được kiểm soát của bạn, vì các tham số này có thể được tuần tự hóa và sau đó được đẩy trở lại vào một cuộc gọi loại "send_X_notification".

Đây có thể được xây dựng bằng cách sử dụng máy phát điện:

script/generate mailer communications_mailer 
+0

Vâng, đó là câu trả lời hay hơn –

+0

Cảm ơn bạn, điều này có vẻ tuyệt vời.Suy nghĩ của tôi với mô hình truyền thông là nó sẽ giúp tôi dễ dàng tạo ra một số lượng lớn email cần gửi và sau đó đợi để gửi chúng cho đến một thời điểm nhất định như nửa đêm. Sử dụng cả mô hình truyền thông và Action Mailer của tôi có hợp lý không? – nixterrimus

+0

+1 để sử dụng ActionMailer để gửi email! Bạn có thể muốn xem xét việc kiểm soát công việc nền nếu bạn định làm mọi thứ không đồng bộ, ví dụ: delay_job – jamuraa

5

bạn có thể thử này (trong đường ray console):

class StaticRender < ActionController::Base 
    def self.render_erb(template_path, params) 
     view = ActionView::Base.new(ActionController::Base.view_paths, {}) 
     class << view 
     include ApplicationHelper 
     end 
     view.render(:file => "#{template_path}.html.haml", :locals => params, :layout => false) 
    end 
    end 


StaticRender.render_erb("home", {}) 

bạn cần phải có quan điểm "nhà" cho rằng .. ..

Các vấn đề liên quan