I want to use a sitewide default template and use a specific version in some controllers to have a good DRY approach to my layout. Those controllers should add a little bit more HTML before rendering the results of the actions, in order to avoid copying the entire sitelayout every time. How can I do that? Currently my code is like this: class WelcomeController < ApplicationController #before_filter :show_options layout ''mydefault'' def contact render :partial => "contact" end private def show_options render :partial => "welcome" end end This only shows the app/views/welcome/_contact.rhtml page. It does not show the layout (that does work in other controllers where I don''t use these things). If I then enable the before_filter (is that the right usage, it does not feel like that) then it only shows the app/views/welcome/_welcome.rhtml page, which is not what I want either. So how should I do this? How should I have this controller use the layout ''mydefault'', render the _welcome partial before every method and also render the contact partial when the contact action is called? I really think I''m not using the right tools here, especially before_filter seems a bit wrong here. Thanks for your help, Bart --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Hi Bart, The way I would do it is to get rid of the partials from your controller and put them in the views. Keep the layout ''mydefault'' at the top of your WelcomeController as you have it. Your ''mydefault'' layout should look something like: header stuff.... <%= render :partial => "welcome" %> <%= @content_for_layout %> footer stuff.. The above layout will always render the "welcome" partial for all actions. You don''t need the before filter. For your contact view, you can include whatever you want in its .rhtml view file. So contact.rhtml can have this in it: <% render :partial => "contact" %> I''m not sure why you would even need the partial. Just put the contents directly in contact.rhtml in your views folder. Best Regards, Tamim Bart Braem wrote:> I want to use a sitewide default template and use a specific version in some > controllers to have a good DRY approach to my layout. Those controllers > should add a little bit more HTML before rendering the results of the > actions, in order to avoid copying the entire sitelayout every time. > How can I do that? Currently my code is like this: > > class WelcomeController < ApplicationController > #before_filter :show_options > layout ''mydefault'' > > def contact > render :partial => "contact" > end > > private > def show_options > render :partial => "welcome" > end > end > > This only shows the app/views/welcome/_contact.rhtml page. It does not show > the layout (that does work in other controllers where I don''t use these > things). If I then enable the before_filter (is that the right usage, it > does not feel like that) then it only shows the > app/views/welcome/_welcome.rhtml page, which is not what I want either. > > So how should I do this? How should I have this controller use the > layout ''mydefault'', render the _welcome partial before every method and > also render the contact partial when the contact action is called? > > I really think I''m not using the right tools here, especially before_filter > seems a bit wrong here. > > Thanks for your help, > Bart > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Hi Tamim (and thanks for your fast reply), Indeed I should have put the contact stuff in contact.rhtml. But... the mydefault layout is also used for controllers that do not have any welcome information to show. Wouldn''t you solution show the welcome partial everywhere? Regards and thanks, Bart Tamim Azizadah wrote:> > Hi Bart, > > The way I would do it is to get rid of the partials from your controller > and put them in the views. Keep the layout ''mydefault'' at the top of > your WelcomeController as you have it. Your ''mydefault'' layout should > look something like: > > header stuff.... > <%= render :partial => "welcome" %> > <%= @content_for_layout %> > footer stuff.. > > The above layout will always render the "welcome" partial for all > actions. You don''t need the before filter. For your contact view, you > can include whatever you want in its .rhtml view file. So contact.rhtml > can have this in it: > <% render :partial => "contact" %> > > I''m not sure why you would even need the partial. Just put the contents > directly in contact.rhtml in your views folder. > > Best Regards, > > Tamim > > > > Bart Braem wrote: >> I want to use a sitewide default template and use a specific version in >> some controllers to have a good DRY approach to my layout. Those >> controllers should add a little bit more HTML before rendering the >> results of the actions, in order to avoid copying the entire sitelayout >> every time. How can I do that? Currently my code is like this: >> >> class WelcomeController < ApplicationController >> #before_filter :show_options >> layout ''mydefault'' >> >> def contact >> render :partial => "contact" >> end >> >> private >> def show_options >> render :partial => "welcome" >> end >> end >> >> This only shows the app/views/welcome/_contact.rhtml page. It does not >> show the layout (that does work in other controllers where I don''t use >> these things). If I then enable the before_filter (is that the right >> usage, it does not feel like that) then it only shows the >> app/views/welcome/_welcome.rhtml page, which is not what I want either. >> >> So how should I do this? How should I have this controller use the >> layout ''mydefault'', render the _welcome partial before every method and >> also render the contact partial when the contact action is called? >> >> I really think I''m not using the right tools here, especially >> before_filter seems a bit wrong here. >> >> Thanks for your help, >> Bart >> >> >> > >> >> >> >> > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Hi Bart, From your message, I got the impression that you wanted the _welcome partial to be rendered before every method: "So how should I do this? How should I have this controller use the layout ''mydefault'', render the _welcome partial before every method and also render the contact partial when the contact action is called?" Another possible way that could work is if you create a simple private method that does this private def show_welcome @welcome = true end Then at the top, you can run your before filter before_filter :show_welcome Then in ''mydefault'': header stuff.... <% if @welcome == true %> <%= render :partial => "welcome" %> <% end %> <%= @content_for_layout %> footer stuff.. There''s probably a better way to do it, but that''s my brainstorming at the moment. Best Regards, Tamim Bart Braem wrote:> Hi Tamim (and thanks for your fast reply), > > Indeed I should have put the contact stuff in contact.rhtml. But... the > mydefault layout is also used for controllers that do not have any welcome > information to show. Wouldn''t you solution show the welcome partial > everywhere? > > Regards and thanks, > Bart > > > Tamim Azizadah wrote: > > >> Hi Bart, >> >> The way I would do it is to get rid of the partials from your controller >> and put them in the views. Keep the layout ''mydefault'' at the top of >> your WelcomeController as you have it. Your ''mydefault'' layout should >> look something like: >> >> header stuff.... >> <%= render :partial => "welcome" %> >> <%= @content_for_layout %> >> footer stuff.. >> >> The above layout will always render the "welcome" partial for all >> actions. You don''t need the before filter. For your contact view, you >> can include whatever you want in its .rhtml view file. So contact.rhtml >> can have this in it: >> <% render :partial => "contact" %> >> >> I''m not sure why you would even need the partial. Just put the contents >> directly in contact.rhtml in your views folder. >> >> Best Regards, >> >> Tamim >> >> >> >> Bart Braem wrote: >> >>> I want to use a sitewide default template and use a specific version in >>> some controllers to have a good DRY approach to my layout. Those >>> controllers should add a little bit more HTML before rendering the >>> results of the actions, in order to avoid copying the entire sitelayout >>> every time. How can I do that? Currently my code is like this: >>> >>> class WelcomeController < ApplicationController >>> #before_filter :show_options >>> layout ''mydefault'' >>> >>> def contact >>> render :partial => "contact" >>> end >>> >>> private >>> def show_options >>> render :partial => "welcome" >>> end >>> end >>> >>> This only shows the app/views/welcome/_contact.rhtml page. It does not >>> show the layout (that does work in other controllers where I don''t use >>> these things). If I then enable the before_filter (is that the right >>> usage, it does not feel like that) then it only shows the >>> app/views/welcome/_welcome.rhtml page, which is not what I want either. >>> >>> So how should I do this? How should I have this controller use the >>> layout ''mydefault'', render the _welcome partial before every method and >>> also render the contact partial when the contact action is called? >>> >>> I really think I''m not using the right tools here, especially >>> before_filter seems a bit wrong here. >>> >>> Thanks for your help, >>> Bart >>> >>> >>> >>> >>> >>> >> >> > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
You can also check which controller and/or action you''re in from the view and display appropriately. For instance, for all actions in controllers one, two, and three, show the welcome: <% if params[:controller] =~ /one|two|three/ %> <%= render :partial => "welcome" %> <% end %> -- 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 -~----------~----~----~----~------~----~------~--~---
Curtis Summers wrote:> You can also check which controller and/or action you''re in from the > view and display appropriately. For instance, for all actions in > controllers one, two, and three, show the welcome: > > <% if params[:controller] =~ /one|two|three/ %> > <%= render :partial => "welcome" %> > <% end %>That seems like a good trick! I''ll try to use that one. Regards, Bart --~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Tamim Azizadah wrote:> There''s probably a better way to do it, but that''s my brainstorming at the > moment. >Your suggestion works, thanks! And sorry if my questions were not entirely clear all the time... Regards, Bart --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---