Will_paginate: pagination links are wrong

I put everything in a pastie to make it a bit more readable:
http://pastie.org/593379

This is the gist:

Will_paginate doesn’t play quite nice. The first result set is fine,
and when I click on one of the paginated links, it returns the following
error:
Couldn’t find DictatedExam with ID=filter_widget
observe_field triggers filter_widget which calls the paginated search…
Which is then rendered in a partial.

Why do things simple when you can do it complicated, right ?

Addendum:

This is what the links look like.
I have no idea what they’re -supposed- to look like.

http://localhost:3000/dictated_exams/filter_widget?page=4

Aldric G. wrote:

Addendum:

This is what the links look like.
I have no idea what they’re -supposed- to look like.

http://localhost:3000/dictated_exams/filter_widget?page=4

Okay… I figured this bit out:

Processing DictatedExamsController#show (for 127.0.0.1 t 2009-08-24
14:54:09) [GET]
Parameters: {“id”=>“filter_widget”, “page”=>“2”}
DictatedExm Load (15.0ms) SELECT * FROM “dictated_exms” WHERE
(“dictated_exms”.“id” = 0)

ActiveRecord::RecordNotFound (Couldn’t find DictatedExam with
ID=filter_widget):
pp/controllers/dictated_exams_controller.rb:16:in `show’

So I’m giving the id of ‘filter_widget’… Why ?

AND FIXED!
I followed http://jellofishi.com/blog/?cat=3

I created app/helpers/remote_link_renderer.rb

class RemoteLinkRenderer < WillPaginate::LinkRenderer
def prepare(collection, options, template)
@remote = options.delete(:remote) || {}
super
end

protected
def page_link(page, text, attributes = {})
@template.link_to_remote(text, {:url => url_for(page), :method =>
:post}.merge(@remote))
end
end

And then in the environment.rb I added, after the Initializer block:

require “will_paginate”
WillPaginate::ViewHelpers.pagination_options[:renderer] =
‘RemoteLinkRenderer’

My will_paginate has become:
<%= will_paginate dictated_exams, :params => {:date => date },
:remote => { :update => ‘filter_counts’} %>

And now it all works…

Okay! I got the pagination links to work. Now I need them to display in
the same div where the first results go, without reloading a page and
discarding my layout.

I had to:
ROUTES.RB
map.resources :dictated_exams, :collection => {:filter_widget => :get}

_list.erb:
<%= will_paginate dictated_exams, :params => {:date => date} %>

index.html.erb, the observe_field:
:url => {:action => ‘filter_widget’, :controller => ‘dictated_exams’,
:method => :post },

dictated_exams_controller.rb:
def filter_widget
@date ||= params[:date].to_date
end_date = @date + 1.days
dictated_exams = DictatedExam.search_one_day(@date, params[:page])
render :partial => ‘dictated_exams/list’ , :locals =>
{ :dictated_exams => dictated_exams, :date => @date }
end

Now to get the results to display where I want them to display…