I would like to set up a pair of style guides for the admin and public sections of a website.
Each will need its own layout which will contain a mixture of static ht
Actualy the answer is NO, you can't do it without a controller. But see some trivial workaround...
It's not very fair but should work:
Assuming you have FooController
with any logic you already have implemented. Now you want to render anypage.html.erb
without creating any special controller. Here is how:
Configure a route to your static page:
get '/your/static/page', to: 'foo#anypage'
Implement the view app/views/foo/anypage.html.erb
.
The problem is that it is impossible to change a path to your view. The path depends on the controller that you specify in a route (foo
in the example). Also note that it will be rendered with a specified for FooController
layout.
It should work by convention and you can read about it here.
UPDATE
Also I found very simmilar solution here. Using ApplicationController seems more reasonable for such pages. (Note that you needn't to create an action for it)
I wanted to do something really stupid once, so if you do too, try this working example.
match :movedpage, :to => proc { |env|
if Rails.env.production?
@remote_path = 'http://productionhost.com'
elsif Rails.env.staging?
@remote_path = 'http://staginghost.com'
else
@remote_path = 'http://localhost:3000'
end
[
200,
{"Content-Type" => "text/html"},
[File.read("public/moved_page.html").gsub('@remote_path', @remote_path)]
]
}, :via => :all
Where moved_page.html was a static page asking people up update their bookmarks and @remote_path just typed in a link like <a href="@remote_path">@remote_path</a>
. Note that <%= %>
won't work because you don't have view helpers in there.
So, theres enough rope to get yourself in trouble ^_^
For some weird reason I wanted to render a blank JS file for a while, and writing a controller felt like too much for this kind of hack. Thanks to @genkilabs 's answer, I used this 3 liner:
get 'analytics/some_file.js', to: -> (env) do
[200, { 'Content-Type' => 'application/javascript' }, ['']]
end