We’re putting together a searchable online help site in Rails, and I’m
using FastRI to full-text index some existing Rails view pages to do
it.
I don’t want to use Sphinx or some other solution, just because it’s
way overkill for the 15-20 .html.erb partials I am looking to index.
So… I need to violate MVC (flog me now)… trying to write a Ruby
class that renders each of these pages as a string, and feeds the
rendered text as a string into FastRI for indexing.
I’ve seen plenty of links, most of which have about the same
approach.
Here are a few of the approaches I have seen:
http://railsforum.com/viewtopic.php?id=16885
http://www.compulsivoco.com/2008/10/rendering-rails-partials-in-a-model-or-background-task/
http://ethilien.net/archives/render-rails-templates-anywhere-even-in-a-model/
http://www.swombat.com/rails-rendering-templates-outside-of-a-contro
All seem to work until I try to render a page with a link_to helper
with a restful route (games_path) or a hash representing the path.
As best I can tell, I think I need a controller and some kind of mock
request.
Using a slight derivation from the more recent blog post:
def render_anywhere(partial, assigns={})
view = ActionView::Base.new(Rails::Configuration.new.view_path,
assigns)
ActionView::Base.included_modules.each { |helper| view.extend
helper }
view.extend ApplicationHelper
view.render(partial)
end
render_anywhere(:file => “/full/path/to/app/views/helps/
_send_credentials.html.erb”)
gives me this:
ActionView::TemplateError (You have a nil object when you didn’t
expect it!
The error occurred while evaluating nil.url_for) on line #6 of app/
views/helps/_send_credentials.html.erb:
actionpack (2.3.4) lib/action_view/helpers/url_helper.rb:85:in send' actionpack (2.3.4) lib/action_view/helpers/url_helper.rb:85:in
url_for’
app/views/helps/_send_credentials.html.erb:6
As best I can tell, I’m missing a controller and possibly a request
object in there somewhere, since it seems to be barfing on:
@controller.send(:url_for, options)
I’ve tried assigning a mock controller in there, and then it looks
like the controller needs a request object. I’ve tried following the
rabbit down the hole, and I just keep getting “nil object when you
didn’t expect it” errors of various flavors.
I’m lost, any ideas?
Thanks in advance–
Jeff Wigal