that's exactly what I want...didn't know about update_all! Thanks I'll
try it when I get back tonight.

On Feb 19, 3:33 pm, "Pardee, Roy" <[email protected]> wrote:
> How about a class method that takes the to-become-featured project as an 
> argument?  Something like:
>
> class Project < AR:Base
>   validates_uniqueness_of :featured
>
>   def self.make_featured(this_project)
>     self.update_all("featured = false")
>     this_project.featured = true
>     this_project.save!
>   end
> end
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of yaphi
> Sent: Thursday, February 19, 2009 4:37 AM
> To: Ruby on Rails: Talk
> Subject: [Rails] Re: One model active at a time
>
> I've been thinking more about this, and instead of doing a whole new model, 
> couldn't I do something like this in my Project model?
>
> before_save :set_if_featured
>
> def set_if_featured
>   articles = Article.find(:first, :conditions => ["featured = ?",
> true])
>   article.featured = false
>   featured = true
> end
>
> On Feb 18, 4:49 pm, Rob Biedenharn <[email protected]>
> wrote:
> > Well, I don't know if a Project makes itself featured, but that's your
> > dilemma.
>
> > In any case, it would be something that a controller action calls on
> > either a Project instance (@project.feature_me) or the FeaturedProduct
> > model (FeaturedProject.is_now(@project)).
>
> > Where you might have:
>
> > class FeaturedProject
> >    def self.is_now(a_project)
> >      fp = find(:first) || new
> >      fp.project = a_project
> >      fp.save
> >    end
> > end
>
> > -Rob
>
> > On Feb 18, 2009, at 4:16 PM, yaphi wrote:
>
> > > Interesting...So I'd have a method in my Project model that sets the
> > > FeaturedProject.
>
> > > I'll play with this and see how it goes. Thanks!
>
> > > On Feb 18, 2:08 pm, Rob Biedenharn <[email protected]>
> > > wrote:
> > >> Why not have a:
>
> > >> class FeaturedProject < ActiveRecord::Base
> > >>    belongs_to :project
>
> > >>    before_create :only_have_one
> > >>    validates_associated :project
>
> > >>    def only_have_one
> > >>      self.class.count < 1
> > >>    end
> > >> end
>
> > >> Then you can FeaturedProduct.find(:first) and be sure that there is
> > >> only one. No need to mess with the projects when the featured one
> > >> changes.  However, you might want to do:
>
> > >> class Project
> > >>    after_destroy :clean_up_if_featured
>
> > >>    def clean_up_if_featured
> > >>      fp = FeaturedProject.find(:first)
> > >>      if fp && fp.project_id == self.id
> > >>        fp.destroy
> > >>      else
> > >>        true
> > >>      end
> > >>    end
> > >> end
>
> > >> Although that might be equivalent to:
>
> > >> class Project
> > >>    has_one :featured_project, :dependent => :destroy end
>
> > >> -Rob
>
> > >> On Feb 18, 2009, at 12:43 PM, yaphi wrote:
>
> > >>> Hey Maurício,
>
> > >>> I have a project model. What I'd like to do is set a project to
> > >>> "featured" so I can display that on the homepage. By marking a
> > >>> project as featured, I'd want all the other projects to
> > >>> automatically have their "featured" column set to false.
>
> > >>> On Feb 17, 8:55 pm, Maurício Linhares
> > >>> <[email protected]>
> > >>> wrote:
> > >>>> No, there isn't. Maybe you're approaching the problem from the
> > >>>> wrong point of view.
>
> > >>>> Try to explain what is your problem that someone else might give
> > >>>> you a better idea.
>
> > >>>> -
> > >>>> Maurício Linhareshttp://alinhavado.wordpress.com/(pt-br)
> > >>>> |http://blog.codevader.com/(en)
>
> > >>>> On Tue, Feb 17, 2009 at 10:13 PM, yaphi <[email protected]>
> > >>>> wrote:
>
> > >>>>> I'm not sure if there is a term for this (which is why I can't
> > >>>>> find anything on google) but I want to be able to set one of my
> > >>>>> models active, where the rest will be set to inactive.
>
> > >>>>> I would guess to write a method that sets all the records to
> > >>>>> inactive, then set the selected object to active. That seems
> > >>>>> like it's pretty messy though. Is there some sort of built-in
> > >>>>> functionality with rails that will only allow one column to be
> > >>>>> true at a time?
>
> > >> Rob Biedenharn          http://agileconsultingllc.com
> > >> [email protected]
>
> > Rob Biedenharn          http://agileconsultingllc.com
> > [email protected]
--~--~---------~--~----~------------~-------~--~----~
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