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