missing will_paginate

I'm not sure why i am having this problem but when i execute a call to the calls controller from a link

<li><%= link_to_unless_current 'My Call Book', { :controller => "calls", :action => "index" } %></li>               <li><em> :: </em></li>

I get the following error

NoMethodError in CallsController#index

undefined method `_of' for #<Class:0x2517c1c>

RAILS_ROOT: /Users/owenhmad/Sites/ministrytrackr/ministrytrackr Application Trace | Framework Trace | Full Trace

/Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ base.rb:1532:in `method_missing_without_paginate' /Library/Ruby/Gems/1.8/gems/mislav-will_paginate-2.3.2/lib/ will_paginate/finder.rb:164:in `method_missing' app/models/call.rb:23 /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/ dependencies.rb:203:in `load_without_new_constant_marking' /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/ dependencies.rb:203:in `load_file' /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/ dependencies.rb:342:in `new_constants_in'

part of my CallsController is

class CallsController < ApplicationController   before_filter :login_required, :only => [ :index, :new, :edit]

  def index     @calls = Call.find(:all)     @recent_calls = @current_user.calls.find(:all)     @recent_calls = @current_user.calls.search(params[:search], params[:page])   end

  def list     @calls = @current_user.calls.find(:all)   end

  def show     @call = Call.find(params[:id])   end

And my call model is

class Call < ActiveRecord::Base   belongs_to :user   has_many:visits, :dependent => :destroy   has_many:visits do     def latest       find :all, :order => 'id DESC', :limit => 3     end

    def all_latest       find :all, :order => 'id DESC'     end   end

  def self.search(search, page)     paginate :per_page => 4, :page => page,     :conditions => ['name like ?', "%#{search}%"],     :order => 'name'   end

end

It says in the error message `method_missing_without_paginate'

I have will_paginate installed in rails as a gem and it shows up in my gem list. Any help to a beginner working on first real app after may books would be appreciated

Thanks Owen

The problem is in your controller action

def index      @calls = Call.find(:all)      @recent_calls = @current_user.calls.find(:all)      @recent_calls = @current_user.calls.search(params[:search], params[:page]) end

first, you are declaring @recent_calls twice, the first one (@recent_calls = @current_user.calls.find(:all)) will never work when the second is there.

next, when you declare a method self.search in the class Call, you call it in the class!! so Call.search(params[:search], params[:page]) willl return an array of calls. (Note: it will return them for ALL users, not just the current.

Third, you are calling a method on class Array (which is what @current_user.calls returns) when you defined that method in the class Call.

If you want to get a list of call objects from a user (i assume user has_many :calls, and call belongs_to :user) with a name like something and paginated. id do it like such:

def index    @recent_calls = @current_user.calls.paginate :per_page => 4, :page => params[:page],     :conditions => ['name like ? AND user_id = ?', "%#{params[:search]} %", @current_user.id],     :order => 'name' end

if you use the method more than twice, then put it in the class, but you would also need to pass the user id.

good luck

Thank you so much Wolas for your reply and your suggestion got rid of my undefined mehod error And I coppied and pasted your suggestion but I now get the following error - I am not sure where to correct it

SyntaxError in CallsController#index

/Users/owenhmad/Sites/ministrytrackr/ministrytrackr/app/controllers/ calls_controller.rb:6: syntax error, unexpected '\n', expecting tASSOC /Users/owenhmad/Sites/ministrytrackr/ministrytrackr/app/controllers/ calls_controller.rb:8: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.'         :conditions => ['name like ? AND user_id = ?', "%#{params[:search]}                       ^ /Users/owenhmad/Sites/ministrytrackr/ministrytrackr/app/controllers/ calls_controller.rb:9: syntax error, unexpected ',', expecting kEND

RAILS_ROOT: /Users/owenhmad/Sites/ministrytrackr/ministrytrackr

Any suggestions would be appreciated - Owen

Thank you so much Wolas for your reply and your suggestion got rid of my undefined mehod error And I coppied and pasted your suggestion but I now get the following error - I am not sure where to correct it

looks the email line wrapped it in a bad way:

   @recent_calls = @current_user.calls.paginate :per_page => 4, :page => params[:page],

should be all on one line. (if you do put in line breaks put them
after a ,)

Fred

As per usual, fred is correct

Thank you again Fred and Wolas but now I am back to my undefined method and the following error

NoMethodError in CallsController#index

undefined method `_of' for #<Class:0x2355ca8>

RAILS_ROOT: /Users/owenhmad/Sites/ministrytrackr/ministrytrackr Application Trace | Framework Trace | Full Trace

/Library/Ruby/Gems/1.8/gems/activerecord-2.0.2/lib/active_record/ base.rb:1532:in `method_missing_without_paginate' /Library/Ruby/Gems/1.8/gems/mislav-will_paginate-2.3.2/lib/ will_paginate/finder.rb:164:in `method_missing' app/models/call.rb:23 /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/ dependencies.rb:203:in `load_without_new_constant_marking'

My index action is now def index       @recent_calls = @current_user.calls.paginate :per_page => 4, :page => params[:page],             :conditions => ['name like ? AND user_id = ?', "%#{params[:search]}         %", @current_user.id],             :order => 'name'

    end

Notice the method-missing-without_paginate. Originally I have the pagination in my model as post one shows per Ryan Bates and it worked in another version of this app so that is why it wasn't in my original index action. I had moved it to the model.

I don't understand why the method_missing_without_paginate is there as my gem list shows I have the latest will_paginate and I am using rails 2.0.2

Any other suggestions?? Thanks in advance Owen

On Aug 21, 9:46 am, "\"Wolas!\"" <jcpen...@gmail.com> wrote: @calls = Call.find(:all)

Still havn't figured out where the NoMethodError is from. Says wiil_paginate is missing and then the log file shows something about rb:23 in my call model. Does that mean line 23 in the model? Any help please for a person in first year rails programing?

Thanks in advance - Owen

look in line 23 of the model Call yes

Thanks for the reply. My model is class Call < ActiveRecord::Base     belongs_to :user     has_many:visits, :dependent => :destroy     has_many:visits do         def latest             find :all, :order => 'id DESC', :limit => 3         end

        def all_latest             find :all, :order => 'id DESC'         end

        #def self.search(search, page)         # paginate :per_page => 4, :page => page,         # :conditions => ['name like ?', "%#{search}%"],         # :order => 'name'         #end     end

   20 def self.search(search, page)    21 paginate :per_page => 4, :page => page,    22 :conditions => ['name like ?', "%#{search}%"],    23 :order => 'name'     end

    ALL_FIELDS = %w(name address age area sex notes)     VALID_SEX = ["Male", "Female"]     validates_presence_of :name, :address, :age, :area     validates_inclusion_of :sex,                             :in => VALID_SEX,                             :message => "must be male or female"

end

And line 23 is in the def for self.search conditions where I have

:order => 'name' so I am not sure what is wron there

Wolas! wrote:

thanks all for your help but I found my error and it involved an extra space in a rails method and the fact that when I changed some of the deffinitions in the model when I refrenced them I refrenced the old terms. thanks again - Owen