I was composing text withing a regular class to send personalized SMS's and I wanted to use 'erb' templates and some other view utilities. Even it is not the Rails way, I wanted to do so.
Here are the tricks I used to build the logic. Key points are:
- how to get access to the view context
- how to get access to the path and the erb templates
- hot to get access to the url helpers in case you need form an url
class MyModel < ActiveRecord::Base
# Use the my_models/_my_model.txt.erb view to render this object as a string
def to_s
url = helpers.new_user_url :host => default_host
view = ActionView::Base.new(views_path)
text = view.render(
:partial => 'my_models/my_model', :format => :txt,
:locals => { :my_model => self, :url => url}
)
end
private
def views_path
@views_path ||= Rails.configuration.paths.app.views.first
end
def self.helpers
@helpers ||= Rails.application.routes.url_helpers
end
def default_host
#you need to configure it in your /config/environments/*.rb files
# for example: config.action_mailer.default_url_options = { :host => 'localhost:3000' }
@default_host ||= Rails.configuration.action_mailer.default_url_options[:host]
end
end
No comments:
Post a Comment