Alpha Blue
2010-Jan-17 23:35 UTC
TUTORIAL - How to create and manage Mailers and Observers
======================================================| (TUTORIAL) - How to Create and Manage Your Mailers | ====================================================== Key Notes: Our pretend rails app is going to be called (mailbag). If I reference our rails application at any point in this tutorial, I will use mailbag as a descriptive reference. I''m going to assume you know how to create a starting rails application. I''m also going to assume you understand the MVC structure (Model/View/Controller) and how to find environment.rb, routes.rb, and that you also have the ability to navigate through your rails application. For this tutorial, it would be best that you go ahead and create a mailbag rails application and follow along with your test app. I''m not going to go into detail on how to setup sweepers in this tutorial. However, you''ll be able to understand why they have their own folder structure once we''re finished with the tutorial. ==Prerequisites= If you are using Ruby 1.8.6 or lower you will also have to download a TLS plugin: http://douglasfshearer.com/blog/gmail-smtp-with-ruby-on-rails-and-actionmailer If you are using Ruby >= 1.8.7 or Ruby >= 1.9 you DO NOT need the plugin. -- Create your Rails app for mailbag -- You can use any database (I use mysql) -- Run your rake db:create to create your database -- Keep your rails app open in your IDE/editor environment -- Follow the tutorial below and have some fun :) (Opening) I see a lot of people asking about mailers and I remember when thinking about mailers felt a lot like ruminating on Sunday night in preparation for a Monday morning work day. Well, hopefully when this tutorial is finished, you will no longer feel this way. I''m going to break down the tutorial into multiple pieces for better clarity and readability. ======================================================What you will accomplish in this tutorial ====================================================== When you are finished, you''ll be able to use a Google Mail account (gmail account) to process all mail for your site, have a solid understanding of observers and how to use them, and will be able to send both text or html emails to any of your site visitors. In addition, your mailers will be better organized. TUTORIAL ONE: ======================================================Organizing your Mailers into an easy-to-read structure ====================================================== Before we start with mailers, wouldn''t it be nicer to have them in an organized structure? If we didn''t organize them, they would be scattered across many different folder paths. With rails and a few lines of code, you can organize all of your mailers, observers, and sweepers into their own unique folder structure. 1. Open your Config --> Environment.rb file. 2. Place in the following code: (code) http://gist.github.com/278857 3. Create your physical folder structure. Inside of your mailbag --> app directory, create sub-directories for mailers, observers, and sweepers. Directory Structure \mailbag -- \app | -- \mailers -- \observers -- \sweepers 4. Create a mailers view directory to hold all of our mailer views. This views sub-directory will be located in mailbag --> app --> mailers. Directory Structure \mailbag -- \app | -- \mailers | -- \views 5. Create an application_mailer.rb file that will be located in mailbag --> app --> mailers. (code) http://gist.github.com/278865 Final Directory Structure \mailbag -- \app | -- \mailers | -- \views -- application_mailer.rb -- \observers -- \sweepers The final directory structure is also shown in a picture that you can view to compare notes with: http://gi176.photobucket.com/groups/w161/MXFH2FXNBE/mailers_directory.jpg ________ Summary: So, what have we done here? Well, first we let our rails environment know through the environment.rb file that we will be loading paths to our new directories. We also created an ApplicationMailer class that is part of ActionMailer::Base and declared where our template views would be located within that file. By doing so, we now control where all of our mailers will be located. And, this means we can now hold all of our mailers in one central location. By itself, it does nothing at this point. All we''ve done is organized where our mailers will operate from. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:36 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
TUTORIAL TWO: ===========================================================Creating a Gmail account and setting up email configuration =========================================================== The next step we want to do is create a default mail account that will handle our email requests. I could have gone into depth on how to use a linux mail based system or any other open source mail environment. The reason why I chose Gmail is because it''s simple and there have been a lot of questions on how to use gmail with rails. With a linux based email system (like postfix), it can be very difficult to understand how to secure your environment, how to properly post records, how to manage email logs, and even how to make sure you don''t receive email relay rejections due to poor configuration. With Gmail, you can set aside many of these worries and start emailing right away. The first step you want to do is go to http://gmail.com and create an account. Remember your username and your password. That''s all you''ll need to to configure your email account in rails. I''ll help you do the rest. Once you have everything created, mosey on down to step 1. ========================================================Adding email to your Rails Environment ======================================================== The first thing we are going to do here is decide where we want our email information to be located. You could place it inside environment.rb but I find that this can clutter things up a bit. The email is going to be used in your entire rails application and the email information isn''t going to change. Therefore, we can place it in an area where it can be managed easily. 1. Create a file called email.rb inside of your config --> initializers folder. Place the following code inside that file: (code) http://gist.github.com/279439 (look at email.rb) Explanation of the fields here: :enable_starttls_auto => by default this is set to true for >= 1.8.7 and>= 1.9 ruby platforms:address => defines the outbound smtp server. The default is set to localhost. :port => gmail uses port 587 in their remote mail configuration :domain => this is really only used if you are specifying a HELO domain (telnet) :authentication => without plain authentication, gmail will not work :user_name => this is the user name you signed up with on gmail :password => this is the password you signed up with on gmail :tls => true 2. Alter your environment.rb file with a few more config lines. (code) http://gist.github.com/279439 (look at environment.rb) ________ Summary: When your rails application starts, the initializer for email.rb is initiated and ActionMailer knows the settings to use for your mail environment. In additiion, the config lines specify to deliver mail, to raise delivery errors, and to specify the encoding used on emails. The reason I place these in the tutorial is to let you be aware of their settings and also so you have the ability to modify and change settings during development and testing. You now have the ability to use email in your rails application. Let''s setup a quick contact mailer for your site and see how it works. Visit the next tutorial. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:38 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
TUTORIAL THREE: ========================================================Setting Up a Messages Repository and Contact Mailer ======================================================== Let''s generate a scaffold that will hold our messages and utilize our contact form. ./script/generate scaffold message name:string company:string phone:string email:string subject:string body:text You should have a controller, a model, several views, and a database migration. Look at the following gist to ensure that your scaffold matches. You want to copy and paste all the code into each of your files to ensure it does match: code: http://gist.github.com/278902 For now, don''t worry about your views. If you are having trouble understanding the file names in the gist, or what a controller, model, route, etc. are, you are probably not ready to handle mail in your application. It''s okay if this is true, and you can continue to attempt to follow-along with this tutorial and ask questions afterwards. Your database migration will have an entirely different name. Just make certain that contents are the same. Go ahead and run the command ''rake db:migrate'' to migrate your database to the current schema. As you can see by the gist, I''ve added some validation to our model. Make sure you copy the validations into your own model. Validations are important, especially with email forms. In our message model, the only fields I''m validating are: :name, :subject, :body, and :email I''m not worried about :company and :phone because those fields are not required for visitors to submit an email to me. However, if you want to require your visitors to fill in every single field within your form, you can add further validations to your model to account for this. Let''s test our MVC and see if the server recognizes what we''ve done so far. Run your application and navigate to messages. As I''m using mongrel, my url for development is: http://localhost:3000/messages .. yours may be a different url and that''s fine. If your app is running fine and you can see this page, you are in good shape. Let''s continue. ========================================================Observers and not using them ======================================================== The concept of observers was a bit mind-boggling for me but once I became accustomed to using them, it was very easy to understand. You can think of an observer as someone that''s watching for some type of event to occur and then reacts to it. It''s the man in the rain coat with the dark shades and the umbrella that''s stalking your house waiting for something to happen. Once it does, it reacts accordingly. In our contact form we''re not going to setup an observer. Mainly we''re doing this so you can have an understanding and an appreciation for why you should use observers in rails. Without knowing what it''s like to not use an observer, you''d never understand what it''s like to have one. 1. Create a contact_mailer.rb file in your app --> mailers directory. Go ahead and use the code below to fill in this file. code: http://gist.github.com/278920 So, let''s look over the code: def message(message) subject message.subject body :message => message recipients "youremail-FBj3rGVNSac4Q++5jOxPmw@public.gmane.org" from message.email sent_on Time.now end It looks pretty similar to a standard email. It contains a subject, a body, houses a recipient (like using TO:), a from (like using FROM:) and has a time stamp. The one thing you''ll want to change here is the recipients field. You should place in a test email address that you have access to that can receive the email. The file name called contact_mailer is pretty descriptive in itself. It lets you know that this file is used for contact mailing. Because the file exists in our mailers directory as a class, we can call upon this class anytime we need to use this specific mailer. 2. You also need to create the views for your contact mailer and allow the ability to handle multipart emails. You''ll do this by creating a contact_mailer folder within your app --> mailers --> views directory. \mailbag -- \app | -- \mailers | -- \views | -- \contact_mailer Inside of the contact_mailer folder you are going to create two .erb views. They will be: message.text.html.erb message.text.plain.erb The .html and the .plain are content types used by your contact mailer. By specifying html you can deliver an html view to any recipient that is able to receive html. By specifying plain, you handle deliveries to recipients that can only view text. By providing both files, you are able to handle both types of content deliveries. Go ahead and add some code to both of those files via this link here: code: http://gist.github.com/279450 So, the million dollar question is how do we let rails know that when someone creates a new message, it should deliver it through our ContactMailer class. Ah, the keyword here (deliver). Open up your messages_controller.rb file and find the method for create. We''re going to let rails know that when a new message is created, it should deliver it to our admin. We can do this with one line: ContactMailer.deliver_message(@message) This will go after we save the message in our create function. Go ahead and look over the code at gist to ensure your''s looks the same: code: http://gist.github.com/278928 When a visitor comes to your site and sends you a message, after the message is dynamically saved to the database, it gets delivered to the recipient through the ContactMailer class. Let''s test it out! 2. Open your URL to messages: http://localhost:3000/messages 3. Click on new. 4. Type in a test message and click create. 5. Check your email to see if you received the test email. If you didn''t, review this section and make sure everything matches correctly. If you did, great! ________ Summary: At this point you are able to send mail with your rails app. You have all of your mailers and views organized, your email accounts and configurations setup, and you are able to test a contact mailer on your site. In addition, messages that are created are automatically saved in a database so you can cross-reference mail on your site. We didn''t secure the actions from visitors but that''s another piece for another time. If you''ve made it this far without hiccups, pat yourself on the back. Let''s continue on to the next section. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:38 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
TUTORIAL FOUR: ========================================================Creating User Authentication ======================================================== Normally, I wouldn''t go into user authentication. But, for this tutorial, mailers and observers are perfect for handling user authentication mailers. Therefore, I''m going to get you starterd with setting up user authentication, and also tidy up our app a little bit so we can work with it easier. Pre-requisites: You need to install a couple of gems for starters (no plugins are required here) gem install restful_authentication (I''m using 1.1.6 right now for this app) gem install acts_as_state_machine (I''m using 2.1.20080704 right now for this app) If you have any issues with gem installations, you can go ahead and find plugins for these two pieces and install them and skip the next section. However, I''d rather you use gems so that you are following this tutorial exactly. Once these gems are installed, we''re going to apply some configurations to environment.rb and then freeze our app. Make the following changes to environment.rb (add the following): config.gem "acts_as_state_machine" config.gem "restful_authentication" code: http://gist.github.com/279507 If you are using plugins, don''t worry about adding the config lines. Now, let''s go ahead and freeze our gems and rails. Run the following commands: rake rails:freeze:gems .. and then .. rake gems:unpack:dependencies After doing this, you''ll see that the Vendors folder now contains a gems folder with restful_authentication and acts_as_state_machine in them and in addition, you have a rails folder that contains the latest rails version. This is because we added config lines telling our application that these gem dependencies were required. For those of you using plugins, you won''t have a gems folder. You''ll only have a plugins folder with the same two pices, and a rails folder. Pat yourself on the back for another job well done. Great! So our app is now frozen to the latest requirements needed for this tutorial to work properly. Let''s continue... The next thing we are going to do is create our user authentication environment. Before you begin, "do not" migrate your database after completing this task. You will be making many changes before performing the migration itself. Let''s start by opening a console and doing the following: ./script/generate authenticated user sessions --include_activation --stateful You should see a lot of items being created (controllers, models, views, db migration, etc.) Again, do not migrate right now. Let''s go ahead and open up our db migration file called "###########_create_users.rb" where # means a digit in db --> migrate. While this schema is okay, it won''t serve our purposes. We''re going to erase everything in this file and add our own. Use the code here: code: http://gist.github.com/279520 Make sure you look inside the schema file you just populated and change the admin email and password fields and the test email and password fields for both the admin and test users that will be created when you do eventually migrate your database to the current version. Do not migrate your database yet. :) Be patient... Now then, look in your app --> models directory and you''ll notice that in addition to user.rb (our user model), a user_mailer.rb and user_observer.rb file were created. Well, we already have an organized structure for mailers and observers so let''s move those two files to their correct directories. 1. Move user_observer.rb to your app --> observers folder. 2. Move user_mailer.rb to your app --> mailers folder. 3. Create a folder called user_mailer in your app --> mailers --> views folder. mailbag -- \app | -- \mailers | -- \views | -- \user_mailer 4. Create the following view erb files in your user_mailer folder (they can be empty - don''t worry we''ll fill them in later) -- activation.text.html.erb -- activation.text.plain.erb -- forgot_password.text.html.erb -- forgot_password.text.plain.erb -- reset_password.text.html.erb -- reset_password.text.plain.erb -- signup_notification.text.html.erb -- signup_notification.text.plain.erb 5. Go under your app --> views and delete the old user_mailer folder completely. You don''t need this anymore. 6. While we''re at it, go ahead and delete the messages_helper.rb and sessions_helper.rb files from your app --> helpers folder. Now then, things are a little cleaner in your app. We still have a few more things to do before we perform our migration. 7. Open up your application_controller.rb file in app --> controllers and delete all of the code and replace it with the following code: code: http://gist.github.com/279530 8. Open up your sessions_controller.rb file in app --> controllers and "remove" the following line from the controller completely. -- include AuthenticatedSystem 9. Open up your users_controller.rb file in app --> controllers and delete all of the code and replace it with the following code: code: http://gist.github.com/279536 10. Open up your users.rb file in app --> models and delete all of the code and replace it with the following code: code: http://gist.github.com/279539 11. Open up your routes.rb file in config and remove all of the code and replace it with the following code: code: http://gist.github.com/279543 12. Now let''s populate all of the erb mail templates in our app --> mailers --> views --> user_mailer with the following files here: code: http://gist.github.com/279547 13. Now let''s open up our user_mailer.rb file under app --> mailers and remove all of the code and replace it with the following code: code: http://gist.github.com/279557 14. Open up your user_observer.rb file under app --> observers and remove all of the code and replace it with the following code: code: http://gist.github.com/279558 Almost done! 15. There''s a machinist.rb file that was created in our config --> initializers folder. Remove this file completely. 16. In order for observers to work, you need to let rails know that you are using them. In your environment.rb file you will add the following line: config.active_record.observers = :user_observer Here''s the code for our environment.rb file : http://gist.github.com/279563 17. Last and finally, run your db migration using rake db:migrate. As soon as you run the migration, your super user and test user will be created which will kick off the observer who should mail you your emails. Check your email. Now then, there''s no need to activate these particular users because they were already activated for you. ________ Summary: I know you are probably anxious to start your rails app up right now and figure out how it''s all tying in together, but don''t do that. We''ll cover everything we just accomplished in the next tutorial section as well as check on our application and learn some extras as well. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:41 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
TUTORIAL FIVE: ========================================================What the heck did I just do? ======================================================== First, let''s start with running our app and you should see the old generic starting screen. If you are encountering any errors right about now then you need to check and make sure you''ve followed this tutorial completely. Backtrack and if you can''t figure it out, don''t worry you can ask questions later. Now, my first inclination is to take you through everything we just did. However, you can look over all of the code in the controllers at your own leisure. This tutorial is about mailers and observers so I''m going to skim a lot here and go into the inner workings of how observers were used with our user authentication system. Open up your user.rb model file located in app --> models, your user_observer.rb file located in app --> observers, and your user_mailer.rb file located in app --> mailers. Keep them side by side as we progress onward. Now then, rather than go into all of the nuances of of your user model file, I want you to skip down to the section that shows these three methods: #used in user_observer def recently_forgot_password? @forgotten_password end def recently_reset_password? @reset_password end def recently_activated? @recent_active end In the users model file, this is the only section you''ll need to see for now. =================================Understanding Observers ================================= So, first, to understand what an observer does, it''s probably easier to think of situations in which automation of emails should occur. Let''s define a quick list of some of them. When a user signs up on your site When a user activates their account on your site When a user forgets their password When a user resets their password These are just a few examples where a user does "something" and your application should respond with an email to the user. Now in the olden days perhaps administrating users manually would be okay. But, in the new era, your site could feasibly have thousands of users. That would end up an administrative nightmare! Thus God created observers... Here are the general mechanics of what takes place when a user registers and signs up on your site: User clicks on signup/register. User enters their information but leaves out some validation requirements. User hits submit and receives errors and has to fix them before re-submitting. User submits the correct information and an account is created. def after_create(user) user.reload UserMailer.deliver_signup_notification(user) end After the account is created, our user observer''s after_create method responds with let''s reload the user (to make sure we have the right user information) and then we''ll deliver our signup_notification message to that specific user. Look in your user_mailer.rb file and you''ll find: def signup_notification(user) setup_email(user) @subject += ''Please activate your new account.'' @body[:url] = "http://localhost:3000/activate/#{user.activation_code}" end Notice that in the after_create method it said deliver_ ---> signup_notification(user) That''s the same thing as saying deliver mail using the signup_notification method in our user_mailer. The signup_notification method then performs a setup_email call using our private setup_email method at the bottom of our user_mailer file and then has to build the email. What view can it use to build our email with? How about the signup_notification.text.(plain/html).erb files in our views --> user_mailer folder. See how the naming convention all matches up? As you can see, this works out pretty good here. So, what happens next? Our user receives an email saying click on this link here to activate your account. Where does it get a link from? How about right from the user_mailer signup_notification method. @body[:url] = "http://localhost:3000/activate/#{user.activation_code}" This basically says that anytime the following symbol (url) is used in the body of the email message, place this string there instead. So, if you open up your signup_notification.text.plain.erb file you''ll see: Visit this url to activate your account: <%=h @url %> So, the user clicks on the url link and is redirected back to your site where the activation takes place through your users_controller activate method. The activation is set true and thus the user has been recently_activated.. Back in our user_observer, it sees that the user was recently_activated so what does it do? UserMailer.deliver_activation(user) if user.recently_activated? It asks the user mailer to deliver an activation email to the user. The user_mailer has: def activation(user) setup_email(user) @subject += ''Your account has been activated!'' @body[:url] = ''http://localhost:3000/'' end which is the method from deliver_ --> activation which was called from our user observer. And, then which views can it use to format the email to the user with? That''s right, activation.text.(html/plain).erb. So, I bet it''s starting to sink in now. If so, pat yourself on the back for understanding the process. So, before we go into the summary of this section, let''s quickly do a sketch of an observer. How about something like a full season sports subscription. What do you need to get this to work? Well, you would need an order model that holds the order. (order.rb) You would need an order observer that watches that model. (order_observer.rb) You would need an order mailer that formats and delivers the mail for that model. (order_mailer.rb) You would need views that correspond to the delivery methods. But, wait..... why? It''s probably safe to assume here that your orders are taking place because your users are purchasing the subscription right? So, there''s absolutely no need to create an observer. We can simply reuse the existing one! So, what if you had something like this: In your order.rb file you would have to process the order and save the order. Let''s assume here that you are looking up the user in question: user = User.find(current_user) .. and then you process the order, adding all of the pertinent information for the subscription. Once the order was saved, you could place the following line right after: user.fullseason_subscribe In your user model you place: def fullseason_subscribe @fullseason_subscribed = true end and .. def recently_fullseason_subscribed? @fullseason_subscribed end In your user_observer you place: UserMailer.deliver_fullseason_subscription(user) if user.recently_fullseason_subscribed? In your user_mailer you would have: def fullseason_subscription(user) setup_email(user) @subject += ''(Full Season Pass) | Welcome to your full season subscription!'' @body[:url] = "#{ROOT_SITE_URL}/some_link_to_return_to" end And of course the ROOT_SITE_URL could be a constant pointing to your root url so you wouldn''t have to constantly change the url. You could add this constant in your environment.rb or place it in the email.rb file within your initializers... And, then which views would it use? How about fullseason_subscription.text.(html/plain).erb. If it''s sinking in, great! ________ Summary: You should now have an understanding of how observers work in terms of the process. You also should have an understanding of how to create a new observer and what pieces you need, or that in some areas, you may want to consoliate your observers specifically to one model if that model is the appropriate one to use. Let''s do some cleanup in the next tutorial. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:41 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
TUTORIAL SIX: ========================================================CSS is cool again with mailers ======================================================== Before I go into this tutorial, one thing I want to remind you from the previous tutorial is that if you want to activate another observer, say for another model file, you need to add that observer in your environment.rb file right after the user_observer. So, for instance, if you wanted to add an order_observer you would do: config.active_record.observers = :user_observer, :order_observer, :etc, :etc, I just wanted to make this part clear. Now that this is out of the way, let''s continue on. Now, if you look at your application which is probably still running, you are probably saying, man my app looks like garbage. So, let''s give it a little bit of a look here. 1. Delete the index.html file in app --> public. 2. Delete the messages.html.erb file in app --> views --> layouts folder. 3. Create an application.html.erb file in your app --> views --> layouts folder and add the following code: code: http://gist.github.com/279634 4. Create an mailbag.css file in your app --> public --> stylesheets folder and add the following code: code: http://gist.github.com/279633 5. Generate a new controller only called root using: ./script generate controller root index 6. Open up your routes.rb file and add the following: # | ======== MAIN SITE ROOT ================================ | map.resources '''', :controller => :root, :only => :index map.root :controller => "root", :action => ''index'' 7. Open up index.html.erb in app --> views --> root and add the following: <h1> My Home Page </h1> <p> This is for the mailbag tutorial. </p> That should get you going. Keep in mind I did not pretty up any of the views or add graphics to anything. You can play with the CSS if you don''t like the way it feels. I just provided you with enough to get you started. Now then, if you restart your app and go to the main page, you''ll see your main page and a starting menu that can get you going on testing your app to see how the contact form works with mailers and observers work with creating new users. When you''ve finished playing with it, proceed on. ===========================================================CSS Inside of Mailers =========================================================== With mailers, all css has to be in-line. This means that you cannot include an external css file and that the css has to be within the style tags. However, one nice thing I like to do with my mailers is create a css partial. I''ll show you how to do this. In your app --> mailers --> views --> user_mailer folder, create a partial template named _css_partial.html.erb and place the following code within it: code: http://gist.github.com/279636 So, how would this look now. Let''s do this. Open up all of your text.html mail template views and place this line right after the <title></title> tags: <%= render :partial => ''css_partial'' %> Guess what? You''ve just added in-line css tags to all of your mailer templates and you can now dress them up easily by doing something like this: <span class="heading">Your Account Has Been Activated<br/></span> <span class="subHeading">Check Out Our Services<br/></span> <p>Sincerely,</p> <br/> <hr class="dotted"/> <span class="xptFooter"><span class="emphasis">The Little Rascals</span> </span> This allows you to pretty up and beautify your emails with in-line css and the nice thing is if you can modify the css partial file and leave the rest of your templates alone. Your final directory picture should look similar to this one: http://gi176.photobucket.com/groups/w161/MXFH2FXNBE/mailers_directory.jpg __________________ Conclusion: I hope that I''ve provided some information to get you started into using mailers, and hopefully added a little bit more than that to the tutorial. If I''ve made a mistake at any point, please don''t hesitate to let me know. This tutorial was meant to help those of you who are new to rails and maybe even provide some added clarity to more seasoned rails veterans that may approach mailing differently than I do. And, by all means, if you find something here that can be improved upon, always provide your input to make it a more solid reference for others. Take care, JD (Alpha Blue) -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-17 23:42 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
Hi Everyone, I know it''s a long tutorial but I felt I couldn''t make it any shorter. I tried to post it into parts. Hopefully you''ll find it a good read. Let me know if you find any issues or errors with it, or if you want to add your own thoughts to the process for clarification. Take care everyone. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Alpha Blue
2010-Jan-18 00:11 UTC
Re: TUTORIAL - How to create and manage Mailers and Observers
By the way, the final directory structure image is pointing to the wrong image. The correct image should be: http://gi176.photobucket.com/groups/w161/MXFH2FXNBE/completed_observers.jpg My apologies. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.