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 -~----------~----~----~----~------~----~------~--~---