Resource_feeder and nested resources

hi,
I’ve a problem with resource_feeder plugin, basically works fine until
we give nested resource url.

Basically: /blog/1/posts/2, named route: blog_post_url

This needs :blog_id and :id passed as a parameter, otherwise it cannot
work.

I’ve managed to go through some :link => lamda { |o| whatever… }
in :feed and :item options, but I’ve got no luck.
Also I’ve tried to specify :url_rewriter option, but I come up with
nothing.

any help would be appreciated, thanks.

[…]
@posts = BlogPost.find(:all, :order => ‘created_at DESC’, :limit
=> limit)
options_for_feed = {
:feed => { :title => “Latest #{limit} Blog Posts”},
:item => { :description => :excerpt }
}
respond_to do |format|
format.html
format.rss { render_rss_feed_for(@posts, options_for_feed) }
format.atom { render_atom_feed_for(@posts, options_for_feed) }
end

Hi Claudio,

This may work, it’s untested, completely off the top of my head,
and it will only work to generate urls for records with existing
ids (which your blog_posts do have).

In the lib directory create a file called blog_post_url_writer.rb
with the following contents:

class BlogPostUrlWriter
def initialize(controller)
@controller = controller
end

def blog_post_url(blog_post)
@controller.send :blog_post_url, blog_post.blog_id, blog_post
end
end

Then, in your controller you do:

blog_post_url_writer = BlogPostUrlWriter.new(self)

and in your options_for_feed you add:

:url_writer => blog_post_url_writer

That should route the calls resource feeder makes to blog_post_url
through your special BlogPostUrlWriter instance, which as you can see
above, inserts the :blog_id into the call to the real blog_post_url
helper.

HTH,
Trevor

On 30-Mar-07, at 4:54 AM, Claudio P. ð wrote:

hi Trevor,
thanks so much for this code, well written and I will test it soon as
I can.

thanks again.

Claudio

Il giorno 30/mar/07, alle ore 18:43, Trevor S. ha scritto:

On Mar 30, 6:43 pm, Trevor S. [email protected] wrote:

Hi Claudio,

This may work, it’s untested, completely off the top of my head,
and it will only work to generate urls for records with existing
ids (which your blog_posts do have).
[…]

allright, now I’m not in hurry and I can write a complete response :slight_smile:

your code works wonderfully, and I’ll blog about it right now (
http://railswatcher.com ) giving you credit.

For people that doesn’t want to bother reading the article here’s the
code for controller:

def index
limit = 10
@posts = BlogPost.find(:all, :order => ‘created_at DESC’, :limit
=> limit)
blog_post_url_writer = BlogPostUrlWriter.new(self)
options_for_feed = {
:feed => { :title => “Latest #{limit} Blog Posts on
iCoreTech.org”, :link => “http://example.com” },

remember to fill those fields, title, description and pub_date, I’ve

encountered problems without.
:item => { :title => :title, :description => :excerpt, :pub_date
=> :created_at },
:url_writer => blog_post_url_writer
}
respond_to do |format|
format.html
format.rss { render_rss_feed_for(@posts, options_for_feed) }
format.atom { render_atom_feed_for(@posts, options_for_feed) }
end
end

Thanks!

Claudio