On Oct 28, 8:43 am, Andrew Edwards <[EMAIL PROTECTED]>
wrote:
> Hi,
>
> Could somewhat offer guidance on this situation.
>
> Say I have a Product model and an associated resource reference
> defined:
>
> map.resources:products, :collection => { :search => :get }
>
> I need to access the search action but have a different view
> (generally RJS) rendered depending on the context of the call.
>
> For example, if called from an order assembly page I might need the
> resulting product collection displayed with add to basket links.
> Whereas on another page I might need them rendered with add to
> purchase order links.
>
> I see to obvious solutions:
>
> 1. Define multiple actions within a single resource. They would
> essentially have the same code but would call different RJS view code
> to render the result.
>
>        map.resources:products, :collection => { :sales_order_search
> => :get, :purchase_order_search => :get }
>
> 2. Have multiple resources such as as:
>
>        map.resources:sales_order_products, :collection => { :search
> => :get }
>        map.resources:purchase_order_products, :collection =>
> { :search => :get }
>
> If going down route 2 I'd probably just repurpose the index action to
> check for a search_string param to narrow the results returned.
>
> Both seem less than perfect, although I'm tended towards solution 1.
> Although I'veonlyhighlighted two view contexts there could be more,
> I would suggest 3 or 4 could be common. How would you handle this
> situation?
>
> Thanks, Andrew

G'day Andrew. I agree with Jeff that you should refactor searching out
of ProductsController.

I was in a similar situation to yours, where I needed to search for
[real estate] properties. At first, I created #filter in the Property
model, as well as #filter in PropertiesController. However, as time
went on, this became cumbersome, and filled up the Property model with
many methods that were only loosely related. To make life simpler, I
moved #filter from Property and PropertiesController into a new model,
called PropertyFilter.

Now when I want to search for properties with varying parameters, I
simply create a PropertyFilter instance, and let that work its magic
to perform the search.

If you decide to do this, I recommend having your new model inherit
from ActiveRecord::BaseWithoutTable :
http://agilewebdevelopment.com/plugins/activerecord_base_without_table
It gives the model all of the fancy ActiveRecord methods (like #find,
#validates_*, etc) without the need for a database table behind it.

I hope that helps. Cheers,
Nick
--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to