okay. on /posts/show/13 i have show.rhtml, which does render_component(:controller=>''comments'', :action=>''display_comments'', :id=>post.id) on comments/display_comments i iterate through the comments and then, display_comments.rhtml render_component(:controller=>''comments'', :action=>''new'', :id=>@id) (@id is the post_id) so this is all works okay, i can add the comment and i changed the redirect to posts/show/@id problem is, if the new comment form fails (say, i dont'' put in a required author field), it redirects to /comments/new/ to give me an error message when i really wnat that error message to be back on /posts/show/ so, two part question -- how can i resolve that issue above? and, am i using too many components? is there a simpler, more elegant way i could be doing this?
my question is perhaps too vague. basically, i have a component form with some validation requirements. problem is, when that form validation fails and bounces back, it goes to the form action /comments/new/ rather than the file that rendering that component (/posts/show/:id) how can i get the form to bounce the validation errors to the main file? matt wrote:> okay. > > on /posts/show/13 > > i have show.rhtml, which does > render_component(:controller=>''comments'', :action=>''display_comments'', > :id=>post.id) > > on comments/display_comments > > i iterate through the comments and then, display_comments.rhtml > > render_component(:controller=>''comments'', :action=>''new'', :id=>@id) > > (@id is the post_id) > > so this is all works okay, i can add the comment and i changed the > redirect to posts/show/@id > > problem is, if the new comment form fails (say, i dont'' put in a > required author field), it redirects to /comments/new/ to give me an > error message when i really wnat that error message to be back on > /posts/show/ > > so, two part question -- how can i resolve that issue above? > and, am i using too many components? is there a simpler, more elegant > way i could be doing this? > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
What does your action that handles the form submission look like? I''d bet that you''re doing the redirect to the success view whether there were errors or not. b matt wrote:> my question is perhaps too vague. > > basically, i have a component form with some validation requirements. > > problem is, when that form validation fails and bounces back, it goes to > the form action /comments/new/ rather than the file that rendering that > component (/posts/show/:id) > > how can i get the form to bounce the validation errors to the main file? > > matt wrote: > >> okay. >> >> on /posts/show/13 >> >> i have show.rhtml, which does >> render_component(:controller=>''comments'', :action=>''display_comments'', >> :id=>post.id) >> >> on comments/display_comments >> >> i iterate through the comments and then, display_comments.rhtml >> >> render_component(:controller=>''comments'', :action=>''new'', :id=>@id) >> >> (@id is the post_id) >> >> so this is all works okay, i can add the comment and i changed the >> redirect to posts/show/@id >> >> problem is, if the new comment form fails (say, i dont'' put in a >> required author field), it redirects to /comments/new/ to give me an >> error message when i really wnat that error message to be back on >> /posts/show/ >> >> so, two part question -- how can i resolve that issue above? >> and, am i using too many components? is there a simpler, more elegant >> way i could be doing this? >> _______________________________________________ >> Rails mailing list >> Rails@lists.rubyonrails.org >> http://lists.rubyonrails.org/mailman/listinfo/rails >> > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
sorry for the delay on this, and thanks for the help: on success, it should (and does) redirect to posts_controller.rb (/posts/show/id but if validation fails, it goes back to itself (/comments/create) when i''d rather it go to /posts/show/id #this create method is in the comments_controller.rb* #it is being included as a component by /posts/show/id def create @comment = Comment.new(params[:comment]) @id = params[:id] @comment.post_id = @id if @comment.save flash[:notice] = ''Comment was successfully created.'' redirect_to :controller=>''posts'', :action => ''show'', :id=>@id else render :action => ''new'' end end Ben Munat wrote:> What does your action that handles the form submission look like? I''d > bet that you''re doing the redirect to the success view whether there > were errors or not. > > b > > matt wrote: > >> my question is perhaps too vague. >> >> basically, i have a component form with some validation requirements. >> >> problem is, when that form validation fails and bounces back, it goes >> to the form action /comments/new/ rather than the file that rendering >> that component (/posts/show/:id) >> >> how can i get the form to bounce the validation errors to the main file? >> >> matt wrote: >> >>> okay. >>> >>> on /posts/show/13 >>> >>> i have show.rhtml, which does >>> render_component(:controller=>''comments'', >>> :action=>''display_comments'', :id=>post.id) >>> >>> on comments/display_comments >>> >>> i iterate through the comments and then, display_comments.rhtml >>> >>> render_component(:controller=>''comments'', :action=>''new'', :id=>@id) >>> >>> (@id is the post_id) >>> >>> so this is all works okay, i can add the comment and i changed the >>> redirect to posts/show/@id >>> >>> problem is, if the new comment form fails (say, i dont'' put in a >>> required author field), it redirects to /comments/new/ to give me an >>> error message when i really wnat that error message to be back on >>> /posts/show/ >>> >>> so, two part question -- how can i resolve that issue above? >>> and, am i using too many components? is there a simpler, more >>> elegant way i could be doing this? >>> _______________________________________________ >>> Rails mailing list >>> Rails@lists.rubyonrails.org >>> http://lists.rubyonrails.org/mailman/listinfo/rails >>> >> _______________________________________________ >> Rails mailing list >> Rails@lists.rubyonrails.org >> http://lists.rubyonrails.org/mailman/listinfo/rails > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
matthew collins wrote: > on success, it should (and does) redirect to posts_controller.rb > (/posts/show/id > > but if validation fails, it goes back to itself (/comments/create) when > i''d rather it go to /posts/show/id > > #this create method is in the comments_controller.rb* > #it is being included as a component by /posts/show/id > > def create > @comment = Comment.new(params[:comment]) > @id = params[:id] > @comment.post_id = @id > if @comment.save > flash[:notice] = ''Comment was successfully created.'' > redirect_to :controller=>''posts'', :action => ''show'', :id=>@id > else > render :action => ''new'' > end > end Yeah, notice that the "else" on the "if @comment.save" goes to your "new" action if your validation fails. Instead, you could switch it to always redirect to /posts/show/id. The side benefit of this is that you never leave the input url (the action attribute of the form tag) in the address bar of the browser. However, since a redirect is a new request, you''ll lose the validation errors, so you gotta stick them in the flash... I just stick the model object in there and pull it out again in the view: def create @comment = Comment.new(params[:comment]) @post = Post.find(params[:id]) @comment.post = @post if @comment.save flash[:notice] = ''Comment was successfully created.'' else flash[:comment] = @comment end redirect_to :controller=>''posts'', :action => ''show'', :id=>@id end and in the posts page: <% @comment = @flash[:comment] if(not @comment.nil?) %> <%= error_messages_for(:comment)%> <% end %> Note that I switched your setting of the post_id on comment to retrieving the post and setting the object (@comment.post = @post). I think that''s the more rails-ish way of doing it. Now, I did almost exactly this in my app, but I''m not using any components... so I don''t know if that''ll make a difference. Wouldn''t think so though... b> > Ben Munat wrote: > >> What does your action that handles the form submission look like? I''d >> bet that you''re doing the redirect to the success view whether there >> were errors or not. >> >> b >> >> matt wrote: >> >>> my question is perhaps too vague. >>> >>> basically, i have a component form with some validation requirements. >>> >>> problem is, when that form validation fails and bounces back, it goes >>> to the form action /comments/new/ rather than the file that rendering >>> that component (/posts/show/:id) >>> >>> how can i get the form to bounce the validation errors to the main file? >>> >>> matt wrote: >>> >>>> okay. >>>> >>>> on /posts/show/13 >>>> >>>> i have show.rhtml, which does >>>> render_component(:controller=>''comments'', >>>> :action=>''display_comments'', :id=>post.id) >>>> >>>> on comments/display_comments >>>> >>>> i iterate through the comments and then, display_comments.rhtml >>>> >>>> render_component(:controller=>''comments'', :action=>''new'', :id=>@id) >>>> >>>> (@id is the post_id) >>>> >>>> so this is all works okay, i can add the comment and i changed the >>>> redirect to posts/show/@id >>>> >>>> problem is, if the new comment form fails (say, i dont'' put in a >>>> required author field), it redirects to /comments/new/ to give me an >>>> error message when i really wnat that error message to be back on >>>> /posts/show/ >>>> >>>> so, two part question -- how can i resolve that issue above? >>>> and, am i using too many components? is there a simpler, more >>>> elegant way i could be doing this? >>>> _______________________________________________ >>>> Rails mailing list >>>> Rails@lists.rubyonrails.org >>>> http://lists.rubyonrails.org/mailman/listinfo/rails >>>> >>> _______________________________________________ >>> Rails mailing list >>> Rails@lists.rubyonrails.org >>> http://lists.rubyonrails.org/mailman/listinfo/rails >> >> >> _______________________________________________ >> Rails mailing list >> Rails@lists.rubyonrails.org >> http://lists.rubyonrails.org/mailman/listinfo/rails >> > > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails