Sunday, February 7, 2010

[Rails] Re: named_scope and params

Craig White wrote:
> I almost suspect that I can't do this because it hasn't yet worked for
> me...
>
> My Salon model...
>
> this works...
> named_scope :states,
> :group => 'state',
> :select => 'state'
>
> doesn't seem to work (at least not in script/console)
> named_scope :salon_cities_by_state,
> :conditions => {:state => @state},
> :group => 'city',
> :select => 'city'
>
> in script/console...
>
> @state = "AZ"
> => "AZ"
>
> Salon.states
> => [#<Salon state: "AZ">, #<Salon state: "CA">, #<Salon state: "CT">,
> #<Salon state: "NV">, #<Salon state: "NY">, #<Salon state: "TX">]
>
> Salon.salon_cities_by_state
> => []
>
> But if I manually execute the 'named_scope' in script/console, it
> works...
>
> Salon.find(:all, :conditions => {:state => @state}, :group =>
> 'city', :select => 'city')
> => [#<Salon city: "Chandler">, #<Salon city: "Flagstaff">, #<Salon city:
> "Glendale">, #<Salon city: "Mesa">, #<Salon city: "Phoenix">, #<Salon
> city: "Prescott">, #<Salon city: "Scottsdale">, #<Salon city: "Sun
> City">, #<Salon city: "Tempe">, #<Salon city: "Tucson">]
>
> Is there a way I can pass a param to a named_scope so I can build my
> dynamically array in any view for any model?
>
> Craig
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.

Pass a proc to named_scope.

named_scope :salon_cities_by_state, lambda {|state|
{ :conditions => { :state => state }, :group => "city", :select =>
"city" } }

Although this is not a good usage of named_scope. Just use a normal
class method.

Named scopes do just that: create *scopes* from which you can construct
and chain additional queries on the object. A named_scope which returns
a collection containing only one property of the object is a rather
useless "scope"; just use a plain old class methods if you need to do
this and be done with it.

Also, please don't build arrays in views. For simple retrieval do this
in a controller; for more complex retrieval/data organization put this
in the appropriate model, or create a new class/module. Easier to
maintain, easier to cache results, easier to test, etc etc.

Perhaps more importantly; I see alot of posts of yours dealing with
indirect ways of working with your Cities and States. Do you have City
and State ActiveRecord models? If so, do you have the appropriate
relations set up with your other models? It seems like simply doing this
would have eliminated all the related problems you've encountered.
--
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@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment