Reputation: 23
My question is how would one go about in rails to create a nested static page? I'm a newb, "self-taught" to Ruby on Rails and have been searching for this answer. Any help would be appreciated, Thank You.
For example:
Directory Structure:
app/view/static/ships/types-of-ships
Current Static Controller
class StaticController < ApplicationController def show render params[:pages] end end
Routes
get "/:pages" => "static#show"
Upvotes: 2
Views: 1447
Reputation: 2432
If you want to create static pages in a Rails app, there are a few resources I would check out.
The last link above is really the go-to for static pages, so I'll address the more specific part of your question regarding nesting.
If you want to map a url to a controller action (and a view), you can simply add it into your routes file. And if you want that to be namespaced, you can just add the namespace in front of the :pages
symbol that will pass along the specific ship name.
get "ships/:pages" => "static#show"
# so going to www.example.com/ships/titanic
# will show your app/view/static/ships/titanic.html.erb page
Alternatively, thoughtbot created a gem called high_voltage that handles some of the setup. I haven't used it, but it may be worth looking at.
With the routes entry you have though, I would caution you that it may have unintended consequences, because if someone enters a route that doesn't match a file you have, it will throw an error.
If you go this route, I would suggest reading up on a catch-all route. You could:
Or whatever else you think would be most helpful to your users.
Once again, there are caveats, because this will catch all errors and ignore other items like rails engines (from what I understand).
I can modify this section based on your answers in the comments, but it seems like you want to add a large number of pages in this category.
Since these are all ships and I assume they have similar data points around each one, you could save this information in the database and just create a Ship scaffold to manage it like a normal Rails project.
This would allow you to:
#show
page
Upvotes: 4