Hi Everyone, this is my first post on Ruby on Rails, I’ve managed to get up and running with Rails 4.1 on FreeBSD with Nginx and Ruby 2.1.1.
My issue is this:
I have a folder located at /public/swf/ that contains numerous swf files I want to load as a background for every page of my site. I’ve successfully created a controller with a randomize method and a corresponding view that loads the backgrounds randomly. The problem I’m having a bit of trouble with now is getting the output of /background/randomize.html.erb and putting that output into the application layout so the backgrounds load on every page. My HTML/CSS is just fine, however I can’t seem to include that in the application view.
Would I be using the render method, content_for, or capture do for taking the raw parsed HTML output of background/randomize and putting it in the application layout?
I would rename randomize.html.erb as a partial and render it in the application layout. If you haven’t worked with partials, refer to the following:
Thanks! So I renamed /views/background/randomize.html.erb to /views/background/_randomize.html.erb and changed the method name in the background controller to _randomize as well. I put <%= render :partial => “background/_randomize” %> in application.html.erb.
Some things work, some things don’t. So my randomize method simply sets @swf_bg to a random file in the public folder and then I put <%= @swf_bg %> in the _randomize.html.erb view. This is displayed properly when I go to /background/_randomize.html.erb, but when I go to the index of my site it’s not including the @swf_bg variable that displays correctly when I go to /background/_randomize
it’s including the code from _randomize.hml.erb in my main page like: instead of , but when I visit /background/_randomize in my browser it works fine.
2014年4月27日日曜日 15時59分57秒 UTC-5 mike2r:
I probably should have anticipated that would be an issue. Partials are not templates, in fact, they are presumed to execute in the same controller/action as the template that calls them. They don’t have their own corresponding actions.
I would have to test this, but I would probably define randomize as a protected method in the applications controller (and thus, would be inherited by all other controllers). I would then execute it as a before_action for those controller/actions that need it. I’d be interested in other suggestions on handling this. I’m not positive this would work, but I think that this would then work in the context of your partial.