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 -~----------~----~----~----~------~----~------~--~---

