Hi there,
I''ve been trying to use the Facebooker::Rails::Publisher inside a
plugin
and I noticed rendering views doesn''t work since the view paths are
always app/views:app/views/<sub-class name>
It appears that despite appending the view_paths to
ActionController::Base that the view paths that are passed to
ActionView::Base.new are [template_root, controller_root]. This means
any appended view_paths within the Rails application, and in my case the
plugin view paths, are missing.
I fixed my problem by changing this from
ActionView::Base.new([template_root,controller_root], assigns, self)
to
ActionView::Base.new(ActionController::Base.view_paths, assigns, self)
def initialize_template_class(assigns)
template_root = "#{RAILS_ROOT}/app/views"
controller_root =
File.join(template_root,self.class.controller_path)
#only do this on Rails 2.1
if ActionController::Base.respond_to?(:append_view_path)
# only add the view path once
unless ActionController::Base.view_paths.include?(controller_root)
ActionController::Base.append_view_path(controller_root)
ActionController::Base.append_view_path(controller_root+"/..")
end
end
returning ActionView::Base.new([template_root,controller_root],
assigns, self) do |template|
template.controller=self
template.extend(self.class.master_helper_module)
def template.request_comes_from_facebook?
true
end
end
end
end
I''m not sure what a more permanent solution would be. Any ideas?
RobL
http://www.robl.me
That looks like a good fix. Does that work for views in the folder of the publisher? If so, send me a pull request on github to make sure you get credit for the change. Mike On Jun 3, 2009, at 5:25 AM, Rob Lacey wrote:> Hi there, > > I''ve been trying to use the Facebooker::Rails::Publisher inside a > plugin and I noticed rendering views doesn''t work since the view > paths are always app/views:app/views/<sub-class name> > > It appears that despite appending the view_paths to > ActionController::Base that the view paths that are passed to > ActionView::Base.new are [template_root, controller_root]. This > means any appended view_paths within the Rails application, and in > my case the plugin view paths, are missing. > > I fixed my problem by changing this from > ActionView::Base.new([template_root,controller_root], assigns, self) > to > ActionView::Base.new(ActionController::Base.view_paths, assigns, self) > > def initialize_template_class(assigns) > template_root = "#{RAILS_ROOT}/app/views" > controller_root = > File.join(template_root,self.class.controller_path) > #only do this on Rails 2.1 > if ActionController::Base.respond_to?(:append_view_path) > # only add the view path once > unless ActionController::Base.view_paths.include? > (controller_root) > ActionController::Base.append_view_path(controller_root) > ActionController::Base.append_view_path(controller_root > +"/..") > end > end > returning > ActionView::Base.new([template_root,controller_root], assigns, self) > do |template| > template.controller=self > template.extend(self.class.master_helper_module) > def template.request_comes_from_facebook? > true > end > end > end > > end > > I''m not sure what a more permanent solution would be. Any ideas? > > RobL > http://www.robl.me > _______________________________________________ > Facebooker-talk mailing list > Facebooker-talk at rubyforge.org > http://rubyforge.org/mailman/listinfo/facebooker-talk-- Mike Mangino http://www.elevatedrails.com
It does work for views in the folder of the publisher. I did look at writing the test for the rendering partials as there doesn''t appear to be one only rendering inline. Although I am not quite sure how you''re testing this as the test RAILS_ROOT appears to be at the same depth as the plugin e.g ./app/views/test/_publisher.erb ./facebooker Shouldn''t the test RAILS_ROOT be somewhere like test/rails_root/ or something? I have pushed my changes, I''ll send you over a pull request shortly http://github.com/braindeaf/facebooker/tree/master RobL http://www.robl.me Mike Mangino wrote:> That looks like a good fix. Does that work for views in the folder of > the publisher? If so, send me a pull request on github to make sure > you get credit for the change. > > Mike > > On Jun 3, 2009, at 5:25 AM, Rob Lacey wrote: > >> Hi there, >> >> I''ve been trying to use the Facebooker::Rails::Publisher inside a >> plugin and I noticed rendering views doesn''t work since the view >> paths are always app/views:app/views/<sub-class name> >> >> It appears that despite appending the view_paths to >> ActionController::Base that the view paths that are passed to >> ActionView::Base.new are [template_root, controller_root]. This means >> any appended view_paths within the Rails application, and in my case >> the plugin view paths, are missing. >> >> I fixed my problem by changing this from >> ActionView::Base.new([template_root,controller_root], assigns, self) >> to >> ActionView::Base.new(ActionController::Base.view_paths, assigns, self) >> >> def initialize_template_class(assigns) >> template_root = "#{RAILS_ROOT}/app/views" >> controller_root = >> File.join(template_root,self.class.controller_path) >> #only do this on Rails 2.1 >> if ActionController::Base.respond_to?(:append_view_path) >> # only add the view path once >> unless >> ActionController::Base.view_paths.include?(controller_root) >> ActionController::Base.append_view_path(controller_root) >> ActionController::Base.append_view_path(controller_root+"/..") >> end >> end >> returning ActionView::Base.new([template_root,controller_root], >> assigns, self) do |template| >> template.controller=self >> template.extend(self.class.master_helper_module) >> def template.request_comes_from_facebook? >> true >> end >> end >> end >> >> end >> >> I''m not sure what a more permanent solution would be. Any ideas? >> >> RobL >> http://www.robl.me >> _______________________________________________ >> Facebooker-talk mailing list >> Facebooker-talk at rubyforge.org >> http://rubyforge.org/mailman/listinfo/facebooker-talk > > -- > Mike Mangino > http://www.elevatedrails.com > > >