Partial Static Site

I’m developing a site compound by a static part and a dynamic one.

I still use things like “link_to(…)”, etc in the static part within
rhtml
files.

In the static part, I don’t have the notion of controller and model.
Reading
some article about the subject, I got the following situation:

  • created a controller, let me call it “static”;
  • put my rhtml files under app/views/static/.

Except for the “index” page, all the rest are static pages.

The problem is that I have a lot of static pages to write and it would
be
confuse to put all them in this directory.

For instance, if I have a menu with several submenus and each submenus
could
have others subsubmenus, I would like the following structure:

-app/views/static/

  • menu1
    • menu1/submenu1
    • menu1/submenu2
  • menu2/
    • menu2/submenu1
    • menu2/submenu2
  • otherfile

I know I could do something like:
-app/views/static/

  • menu1
  • menu1_submenu1
  • menu1_submenu2

But I would prefer the other much cleaner solution.

I first tried some links like:
link_to => ‘id’ => ‘submenu1’

The link worked as I expected, but after noticing it didn’t work, I
remembered that Rails would try to run the action ‘menu1’ with
the ‘submenu1’ as a parameter, but I’m not using this parameter in this
action.

I would not like to write an action for every view I want in a
subdirectory…

What would be the Rails way to achieve what I want?

I want Rails to render all the remaining url after the ‘static’
controller
as the local url after app/views/static.

Let me know if I was not clear. Sorry for the big message, but I
couldn’t
make my question clear enough in a small message.

Thanks in advance,

Rodrigo.

Rodrigo Rosenfeld R. wrote:

  • put my rhtml files under app/views/static/.
    • menu1
    • menu1_submenu1
      action.
      make my question clear enough in a small message.

Thanks in advance,

Rodrigo.

I ended up with the following solution:

in static_controller.rb:

before_filter :show_static

def show_static
if request.request_parameters[‘id’]

render :template => request.env[‘PATH_INFO’]

the solution above is probably server dependent.

The solution below is probably a better one:

  render :template => request.request_parameters['controller'] + '/' 
  •   request.request_parameters['action'] + '/' +
      request.request_parameters['id']
    
    end
    end

Any thoughts about this solution?

Regards,

Rodrigo.

def show_static
if request.request_parameters[‘id’]

render :template => request.env[‘PATH_INFO’]

the solution above is probably server dependent.

The solution below is probably a better one:

 render :template => request.request_parameters['controller'] + '/' +
   request.request_parameters['action'] + '/' +
   request.request_parameters['id']

end
end

I suspect what you want is a custom route. Something like

map.connect ‘static/*url_parts’, :controller => “static”, :action =>
“show”

Have the show action of the static_controller put the url_parts array
back
together with ‘/’ into ‘menu1/submenu1’ and then process the template at
app/views/static/menu1/submenu1.rhtml

Cynthia K. wrote:

I suspect what you want is a custom route. Something like

map.connect ‘static/*url_parts’, :controller => “static”, :action =>
“show”

Have the show action of the static_controller put the url_parts array back
together with ‘/’ into ‘menu1/submenu1’ and then process the template at
app/views/static/menu1/submenu1.rhtml

Thanks, I didn’t know this trick of using arrays in routes…

Rodrigo.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs