2010-09-10 40 views
21

Tôi có một phương pháp mà phải mất một mảng các chuỗi và tham gia họ để họ làm điều gì đó như thế này:Tôi đặt phương thức trợ giúp cho chế độ xem ActionMailer ở đâu?

>> my_arr 
=> ["A", "B", "C"] 
>> and_join(my_arr) 
=> "A, B, and C" 

Mà tôi muốn bưu phẩm của tôi để có thể truy cập vì vậy tôi có thể sản lượng một số thông tin vào một email. Tôi không thể tìm thấy một nơi tốt để đặt nó và đặt nó trong file application_helper.rb và nó không tìm thấy nó ở đó. Nó nên đi đâu?

+3

Đáng xem xét phương pháp mở rộng 'to_sentence' cho các mảng mà đường ray cung cấp. – Shadwell

+0

@Shadwell, đăng câu trả lời đó và tôi sẽ +1 nó. Đó là chính xác những gì tôi đang tìm kiếm. – DJTripleThreat

+0

tương tự - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-activerecord-object-inside-mail/ –

Trả lời

62

Sử dụng phương pháp helper trong bưu phẩm của bạn để xác định các lớp helper để sử dụng

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 

# my_mailer.rb 
class MyMailer < ActionMailer::Base 
    helper MailerHelper 
    … 
end 

sau đó bạn có thể sử dụng các phương pháp trong quan điểm là tốt.

+0

Tuyệt vời, đã hoạt động! – DJTripleThreat

+4

Tuyệt. Thêm 'bao gồm MailerHelper' vào' MyMailer

10

Sẽ rất đáng để xem phương pháp mở rộng to_sentence cho các mảng mà đường ray cung cấp.

+0

+1 Cảm ơn lời khuyên đó. – DJTripleThreat

4

+1, làm việc tốt, chỉ cần một sự điều chỉnh nhỏ:

Bạn phải sử dụng mô-đun thay vì lớp trong file helper:

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 
4

Một câu hỏi đã được trả lời, nhưng tôi đã không nhận được nơi/những gì-tập tin để sửa đổi từ các SO phản ứng khác. Đây là cách tôi đã làm nó:

Ở dưới cùng của ứng dụng/config/initializers/devise.rb bạn có thể thêm này:

Devise::Mailer.class_eval do 
    helper :application # includes "ApplicationHelper" 
end 

Ví dụ này sẽ bao gồm các phương pháp trong/app/giúp đỡ/application_helper. rb. Thay vào đó, bạn có thể bao gồm một tệp trợ giúp khác - nếu, ví dụ, phương thức này chỉ dành cho bưu phẩm hoặc chỉ được sử dụng cho một trình điều khiển khác. Các def tôi cần thiết được sử dụng trên tất cả, vì vậy tôi đặt trong tập tin đó để tất cả các quan điểm có thể truy cập nó.

0

Trong trường hợp của tôi, cho Rails 5.1, tôi đã phải sử dụng cả hai bao gồm và phương pháp helper, như thế này:

include ApplicationHelper 
helper :application 

Và sau đó chỉ cần tiến hành để sử dụng phương pháp bình thường.

class MyMailer < ActionMailer::Base 
    include ApplicationHelper 
    helper :application 

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end 
Các vấn đề liên quan