Hi all, I''m sure this is really simple, but I can''t seem to figure it out. I want to let users preview their messages before submitting. Something in the form of: def new @post = Post.new end def preview #preview message text here #@post = Post.new(params[:post]) <--? end def create #save message on user''s confirmation ... @post.save end Have any ideas for this noob? -- 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I just did this myself so let me try: there are many ways to do preview. The way I''m doing it, I''m showing the preview in all its glory and show the filled in form on the same page so user can edit it some more or submit it. main thing to realize is you can use the same new and edit view you are using now and call the same actions. I''ll tackle previewing the edit of an existing post first. First add a preview button to the form e.g., <input type="submit" name="submit" value="Post it!" /> <input type="submit" name="submit" value="Preview" /> In my PostsController''s update method (my message model is Post, obviously) # find @post as usual def update @post = Post.find(params[:id]) if params[:submit] == ''Preview'' @post.attributes = params[:post] preview( ''edit'') return end ## do usual thing for rest of it ,,,, If you look at your update method, normally you do something like this @post = Post.find(params[:id]) if @post.update_attributes(params[:post]) ... but you don''t want to update_attributes, which saves it to the DB. You just want to copy them from the form, which is exactly what @post.attributes = params[:post] does. That''s what you probably got stuck on. How did I figured that out? I just googled rails update_attributes and found http://railsmanual.com/class/ActiveRecord::Base/update_attributes and it shows me def update_attributes(attributes) self.attributes = attributes save end That''s exactly what I need to do, without the save. Here''s my preview method (nothing magical about the name preview, just the obvious name), which I put under protected b/c it shouldn''t be called from outside protected def preview( action) @preview = @post.valid? render :action => action end this sets a variable called @preview to true if post is valid. Calling @post.valid? validates your post w/o saving it. If there are errors, it''ll set the error msgs that you display in your form, e.g. <%= error_messages_for :post %> Then I just render the action I passed, i.e., render :action => ''edit'' which renders ''posts/edit.rhtml'' In posts/edit.rhtml, I added this above the form <%= if defined?( @preview) && @preview %> ..... display post ...... <% end %> How you display the post is up to you. To test, you can just do something simple like this to verify it''s working <%= h(@post.title) %> <%= h(@post.body) %> what I ended up doing was extract the code to display a post from show.rhtml and use render=>:partial to display it. <%= render :partial => ''shared/post'', :layout => true, :locals => { :post => @post, :preview => true } %> Note that I''m passing the @post variable as well as setting a preview vaiable to true b/c inside the partial I need to suppress certain features when showing a preview. That''s it. What about when creating a new post? Just do this: def create @post = Post.new(params[:post]) if params[:submit] == ''Preview'' preview( ''new'') return end ## rest unchanged ...... Same thing as edit, but I''m just creating a new post with attributes from the form''s post, and I go and render new.rhtml again. My new.rhtml has the same added code as edit.rhtml. I guess I could refactor some more and have just one view for both new and edit, but hey.. Note: if the post doesn''t validate, I don''t show the preview. But you could show the preview anyway if you want to. here''s one article on doing AJAX preview http://www.railsdiary.com/diary/ajax_markdown_preview hope that helps. If anybody sees something wrong, pls let me know. On Dec 14, 5:11 am, Bob Sanders <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hi all, > > I''m sure this is really simple, but I can''t seem to figure it out. I > want to let userspreviewtheir messages before submitting. Something in > the form of: > > def new > @post = Post.new > end > > defpreview > #previewmessage text here > #@post = Post.new(params[:post]) <--? > end > > def create > #save message on user''s confirmation > ... > @post.save > end > > Have any ideas for this noob? > -- > Posted viahttp://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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Wow! That''s one of the greatest and most in-depth tutorials I''ve ever read. I seriously cannot thank you enough. These are the kind of tutorials that help noobs like me understand so much about what''s going on. Really good stuff. Thank you! :) -- 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
lowsumwai-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2007-Dec-20 05:42 UTC
Re: Preview Message Before Saving?
I second that, I definately learned something today! thank you rubynuby! On Dec 20, 1:31 pm, Bob Sanders <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Wow! That''s one of the greatest and most in-depth tutorials I''ve ever > read. I seriously cannot thank you enough. These are the kind of > tutorials that help noobs like me understand so much about what''s going > on. Really good stuff. Thank you! :) > -- > Posted viahttp://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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---