I created a helper method in person_helper.rb, and want to use this
method in person_controller#list, but I get the error "undefined method
`filter_sql'' for #<PersonController:0x872dec4>".
Here is the helper class (person_helper.rb):
module PersonHelper
  Sql = "SELECT * FROM People WHERE name LIKE ? OR address LIKE ?"
  def filter_sql(name, address, city)
    sanitize_sql([Sql, name.to_s + ''%'', address.to_s +
''%''])
  end
end
Here is the relevant part of the controller class
(person_controller.rb):
class PersonController < ApplicationController
  def list
    sql = filter_sql(params[:name_val], params[:address_val])
    @person_pages, @people = paginate Person.find_by_sql(sql), per_page
=> 50
  end
end
Any ideas on what I am doing wrong?  Thanks in advance for your help!
-- 
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
I would highly recommend you push this back into your model if you need it
in both places. This seems like business logic, which belongs in the model.
class Person < ActiveRecord::Base
   ... your other stuff
   def self.filter_by_name_and_address(name, address)
       name = "#{name}%"
       address = "#{address}%"
       self.find(:all, conditions=>["name like ? and address like
?", name,
address
   end
end
Your controller might be like this now:
def list
   @person_pages, @people = paginate
Person.filter_by_name_and_address(params[:name],
params[:address]), per_page => 50
end
That''s untested, btw, but it should get you going in the right
direction.
Helpers are really for code that is directly related to views and
controllers. You want to try to keep as much db stuff in the model as you
can. You might have a compelling reason to use the helper as you''d
originally intended, so my apologies if this is not suitable for you.
On 7/19/07, Kevin Alons
<rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>
wrote:>
>
> I created a helper method in person_helper.rb, and want to use this
> method in person_controller#list, but I get the error "undefined
method
> `filter_sql'' for #<PersonController:0x872dec4>".
>
> Here is the helper class (person_helper.rb):
>
> module PersonHelper
>   Sql = "SELECT * FROM People WHERE name LIKE ? OR address LIKE
?"
>   def filter_sql(name, address, city)
>     sanitize_sql([Sql, name.to_s + ''%'', address.to_s +
''%''])
>   end
> end
>
> Here is the relevant part of the controller class
> (person_controller.rb):
>
> class PersonController < ApplicationController
>   def list
>     sql = filter_sql(params[:name_val], params[:address_val])
>     @person_pages, @people = paginate Person.find_by_sql(sql), per_page
> => 50
>   end
> end
>
> Any ideas on what I am doing wrong?  Thanks in advance for your help!
>
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
> Your controller might be like this now: > > > def list > @person_pages, @people = paginate > Person.filter_by_name_and_address(params[:name], > params[:address]), per_page => 50 > end >Putting this in the model class is good advice. I am having a problem in getting this to work, however, looking for a bit more help... Here is my model list method (stripped down to isolate my problem): def list @person_pages, @people = paginate Person.find(:all, :conditions => "lastname=''test''"), :per_page => 50 end which results in this exception: "#<Person:0x85f9d14>#<Person:0x85f9b5c>#<Person:0x85f9b34>#<Person:0x85f9b0c>#<Person:0x85f9ae4>#<Person:0x85f9abc>#<Person:0x85f9a94>#<Person:0x85f9a6c>" is not a valid constant name! Apparently using Person.find (like the scaffold show method) doesn''t work with paginate?? Any ideas? This seems so simple and is undoubtedly a stupid error on my part, but I just don''t see it... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Yes, sorry... that was a mistake on my end. I should have tested my code before I sent it to you. The built-in paginator is kinda ugly, doesn''t perform well. I''d recommend the will_paginate plugin. It will let you do what you want to do. You are correct that the paginate method doesn''t let you do what you want. On 7/19/07, Kevin Alons <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > > Your controller might be like this now: > > > > > > def list > > @person_pages, @people = paginate > > Person.filter_by_name_and_address(params[:name], > > params[:address]), per_page => 50 > > end > > > > Putting this in the model class is good advice. I am having a problem > in getting this to work, however, looking for a bit more help... > > Here is my model list method (stripped down to isolate my problem): > > def list > @person_pages, @people = paginate Person.find(:all, :conditions => > "lastname=''test''"), :per_page => 50 > end > > which results in this exception: > > "#<Person:0x85f9d14>#<Person:0x85f9b5c>#<Person:0x85f9b34>#<Person:0x85f9b0c>#<Person:0x85f9ae4>#<Person:0x85f9abc>#<Person:0x85f9a94>#<Person:0x85f9a6c>" > is not a valid constant name! > > Apparently using Person.find (like the scaffold show method) doesn''t > work with paginate?? > > Any ideas? This seems so simple and is undoubtedly a stupid error on my > part, but I just don''t see it... > > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> I''d recommend the will_paginate plugin. It will let you > do what you want to do.My last example was stripped down, I will still need to use a find_by_sql method. I see this is supported with will_paginate, but the :total_entries parameter must be explicitly provided. Does this mean I would have to run a query first to get/provide the total? This would also mean that I would have to re-retrieve this value when a row is added/deleted but I guess that makes sense since the pages wouldn''t be right anymore anyway... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---