NICE! You've figured out some cool stuff. I would have loved to have known about <table-plus fields="*"> a month ago! And :order_by => parse_sort_param(*standard_fields(model))) rocks. You should write this up as a recipe!
Thanks, Andy On Jul 1, 3:00 am, Iain <[email protected]> wrote: > I don't know if this is too late, but I have a nice solution to the > duplication problem. > > First, I replaced the default index-page tag with one with a table, > but configured so that the table is "opt-out" rather than "opt- > in" (eg. by default all model fields are shown) > > <extend tag="index-page" attrs="skip"> > <old-index-page merge> > <collection: replace> > <table-plus fields="*" skip="#{skip}" without-search-form> > <controls:/> > </table-plus> > </collection:> > </old-index-page> > </extend> > > Here the key revelation was that you can use "*" to specify all > fields. Then, in the controller, I've made it accept all fields as > sort parameters: > > include Hobo::RapidHelper > > def index > hobo_index model.apply_scopes(:order_by => parse_sort_param > (*standard_fields(model))) > end > > This uses the standard_fields method from RapidHelper on the model > field (that's inherited by all hobo controllers) > > In this example I've turned off searching, because I haven't thought > of a good way of determining the correct field to search on > dynamically > > I hope that helps! > > On Jun 25, 2:40 am, Montgomery Kosma <[email protected]> wrote: > > > Where I had a complex situation -- though perhaps less complex as what > > you're after -- I successfully used named scopes instead of hobo's > > apply_scopes. In my case I have atable-plusshowing custodians on my > > project page, and wanted to make the search box find custodians. > > > In my case, I added two named scopes to my join class > > (ProjectCustodian): > > > named_scope :custodian_names_like, lambda { |search_for| (! > > search_for.blank?) ? {:include => :custodian, :conditions => > > ["custodians.name LIKE ?", "%#{search_for}%"] } : nil } > > > named_scope :sort_custodians_by, lambda { |sort_by| > > if !sort_by.blank? > > # fix custodian --> custodians > > klass=sort_by.first.split(".").first > > sort_by.first.gsub!(klass, klass.pluralize) > > {:include => :custodian, :order=> sort_by.join(' ')} > > else > > nil > > end > > } > > > and this is how I used them from my ProjectsController: > > > def edit > > hobo_show do > > @project = find_instance > > order= parse_sort_param("custodian.name", "custodian.type", > > "custodian.last_name") > > @project_custodians = > > @project.project_custodians.custodian_names_like(params > > [:search]).sort_custodians_by(order) > > end > > end > > > On Jun 24, 10:19 am, hobo_hippy <[email protected]> wrote: > > > > So Montgomery Kosma, > > > > def index > > > @timesheets = Timesheet.apply_scopes(:search => [params > > > [:search], :name], :order_by => parse_sort_param > > > (:name, :time, :client, :project, :user, :updated_at)) > > > hobo_index @timesheets > > > > I've got one little modification I'd like to make. the search only > > > looks at :name becuase that's stated here: > > > > (:search => [params[:search], :name] > > > > if I want to be able to search :name, :client, :project, and :user how > > > can I modify this? i tried just adding the fields, but that doesn't > > > work since client, project, and user are not @Timesheets, where I > > > already told it to look. Do I have to write another search method > > > inside index? How can I make it search across all models instead of > > > one model? > > > > btw I get the following error message: > > > > Mysql::Error: Unknown column 'timesheets.user' in 'where clause': > > > SELECT * FROM `timesheets` WHERE (((timesheets.name like '%CJ%') OR > > > (timesheets.user like '%CJ%') OR (timesheets.client like '%CJ%') OR > > > (timesheets.project like '%CJ%'))) > > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/abstract_adapter.rb:188:in `log' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/mysql_adapter.rb:309:in `execute' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/mysql_adapter.rb:563:in `select' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/abstract/database_statements.rb:7:in > > > `select_all_without_query_cache' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/abstract/query_cache.rb:60:in `select_all' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/abstract/query_cache.rb:81:in `cache_sql' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > connection_adapters/abstract/query_cache.rb:60:in `select_all' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > base.rb:635:in `find_by_sql' > > > /usr/lib/ruby/gems/1.8/gems/hobo-0.8.7/lib/hobo/model.rb:293:in > > > `find_by_sql' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > base.rb:1490:in `find_every' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > base.rb:589:in `find' > > > /usr/lib/ruby/gems/1.8/gems/hobo-0.8.7/lib/hobo/model.rb:286:in `find' > > > /usr/lib/ruby/gems/1.8/gems/hobo-0.8.7/lib/hobo/scopes/ > > > named_scope_extensions.rb:20:in `send' > > > /usr/lib/ruby/gems/1.8/gems/hobo-0.8.7/lib/hobo/scopes/ > > > named_scope_extensions.rb:20:in `method_missing' > > > /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/ > > > base.rb:2003:in `with_scope' > > > (__DELEGATION__):2:in `__send__' > > > (__DELEGATION__):2:in `with_scope' > > > (__DELEGATION__):2:in `is_a?' > > > app/controllers/timesheets_controller.rb:9:in `index' > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Hobo Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/hobousers?hl=en -~----------~----~----~----~------~----~------~--~---
