5

मैं एक पर्यवेक्षक जो इस तरह दिखता है:रेल: ऑब्जर्वर में उपयोग यूआरएल हेल्पर

class CommentObserver < ActiveRecord::Observer 
    include ActionView::Helpers::UrlHelper 

    def after_create(comment) 
     message = "#{link_to comment.user.full_name, user_path(comment.user)} commented on #{link_to 'your photo',photo_path(comment.photo)} of #{comment.photo.location(:min)}" 
     Notification.create(:user=>comment.photo.user,:message=>message) 
    end 

end 

मूल रूप से सब मैं इसे उपयोग कर रहा हूँ एक निश्चित उपयोगकर्ता के लिए एक सरल सूचना संदेश बनाने के किया जाता है जब कोई व्यक्ति कोई टिप्पणी पोस्ट करने के लिए उनकी तस्वीरों में से एक पर।

यह एक त्रुटि संदेश के साथ विफल:

NoMethodError (undefined method `link_to' for #<CommentObserver:0x00000102fe9810>): 

मैं ActionView::Helpers::UrlHelper कि को हल किया जा सहित अपेक्षा की होगी, लेकिन यह कोई प्रभाव नहीं लगता है।

तो, मैं अपने पर्यवेक्षक में यूआरएल सहायक कैसे शामिल कर सकता हूं, या फिर इसे किसी अन्य तरीके से प्रस्तुत कर सकता हूं? मैं खुशी से "संदेश दृश्य" को आंशिक या कुछ में स्थानांतरित कर दूंगा, लेकिन पर्यवेक्षक के पास इसे स्थानांतरित करने के लिए कोई संबंधित विचार नहीं है ...

उत्तर

2

तो, यह पता चला है कि यह उसी कारण से नहीं किया जा सकता है क्योंकि आप मेलर व्यू में link_to का उपयोग नहीं कर सकते हैं। पर्यवेक्षक के पास वर्तमान अनुरोध के बारे में कोई जानकारी नहीं है, और इसलिए लिंक हेल्पर्स का उपयोग नहीं कर सकता है। आपको इसे एक अलग तरीके से करना है।

3

जब आप पृष्ठ पर प्रस्तुत किए जाते हैं तो संदेश क्यों नहीं बना रहे हैं और फिर इस तरह कुछ का उपयोग कर कैशिंग?

<% cache do %> 
    <%= render user.notifications %> 
<% end %> 

इससे आपको पर्यवेक्षक में एक हैक करना होगा और रेल में अधिक "मानकों का अनुपालन" होगा।

+0

यह आवश्यक नहीं है कि एक ईमेल भेजने जाये। मैं एक साधारण मॉडल बनाने की कोशिश कर रहा हूं जिसका उपयोग नोटिस बनाने के लिए किया जा सकता है (जैसे किसी को आपके प्रश्न का उत्तर पोस्ट करते समय स्टैक ओवरफ़्लो पर एक)। उपयोगकर्ता की सेटिंग्स के आधार पर अधिसूचना संदेश ईमेल कर सकती है या इसे केवल उपयोगकर्ता डैशबोर्ड पर रख सकती है। यह पर्यवेक्षक बस एक टिप्पणी बनाने के लिए एक अधिसूचना संदेश बना रहा है। अगर आपके पास पूरे सिस्टम के लिए बेहतर सुझाव है तो मुझे बताएं, यह आज मुझे मार रहा है और मैं अध्ययन के लिए इस तरह के अधिसूचना प्रणाली का एक अच्छा उदाहरण नहीं ढूंढ पाया। – Andrew

+0

... um मुझे लगता है कि मैंने पहले ही टिप्पणी की है के बाद संपादित किया है ... :) मैंने पहले कभी "कैश" का उपयोग नहीं किया है - यह कैसे काम करता है? – Andrew

2

बात के इस प्रकार संभाल करने के लिए, मैं ईमेल के मुख्य भाग उत्पन्न करने के लिए एक AbstractController बनाया, फिर मुझे लगता है कि में पारित मेलर वर्ग के लिए एक चर के रूप में:

class AbstractEmailController < AbstractController::Base 

    include AbstractController::Rendering 
    include AbstractController::Layouts 
    include AbstractController::Helpers 
    include AbstractController::Translation 
    include AbstractController::AssetPaths 
    include Rails.application.routes.url_helpers 
    include ActionView::Helpers::AssetTagHelper 

    # Uncomment if you want to use helpers 
    # defined in ApplicationHelper in your views 
    # helper ApplicationHelper 

    # Make sure your controller can find views 
    self.view_paths = "app/views" 
    self.assets_dir = '/app/public' 

    # You can define custom helper methods to be used in views here 
    # helper_method :current_admin 
    # def current_admin; nil; end 

    # for the requester to know that the acceptance email was sent 
    def generate_comment_notification(comment, host = ENV['RAILS_SERVER']) 
     render :partial => "photos/comment_notification", :locals => { :comment => comment, :host => host } 
    end 
    end 

मेरी पर्यवेक्षक में:

def after_create(comment) 
    email_body = AbstractEmailController.new.generate_comment_notification(comment) 
    MyMailer.new(comment.id, email_body) 
    end 
संबंधित मुद्दे