Hi!
At first read this article 
http://spin.atomicobject.com/2008/06/16/finder-objects-in-rails
About Status model, at my mind is unnecessary. You can create  status
field in Contracts table

About:
  GROUPS = [{:stage => 1, :description => "been entered as
prospect"},
            {:stage => 2, :description => "proposal has been
submitted"},
            {:stage => 3, :description => "been notified as won"},
            {:stage => 4, :description => "been contracted"}]

In our project, such things we move to presenters
in Contract:
compose_of :status, :class_name => 'ContractStatus', :mapping => %
(status to_i) do |value|
  ContractStatus.new(value)
end
scopes_state :status, :with => ContractStatus::STATUSES (see
http://giantrobots.thoughtbot.com/2008/10/14/life-in-the-fast-lane)


in presenter ContractStatus:

  STATUSES = [:notified_as_won, :submitted, contracted]
   HUMANIZE_STATUSES =
  {
     :notified_as_won => 'been notified as won',
     :submitted =>'proposal has been submitted'
  }

  def initialize(value)
    @int_status =
       case value
           when Symbol
               STATUSES.index(value)
           when Integer
               value
           else
               raise
      end
  end

  #show in view
  def to_s
     HUMANIZE_STATUSES[self.to_sym]
  end

  def to_sym
     STATUSES.at(self.to_i)
  end

  #save in db
  def to_i
     [EMAIL PROTECTED]
  end

Good luck!
On 19 окт, 11:43, nick <[EMAIL PROTECTED]> wrote:
> I've got an application with 2 related models. I want to search for
> data based on conditions in both models. I want to return items from
> the first model (Contract) grouped by conditions in the second
> (Status)
>
> At the moment, I'm basically doing it as shown below. It seems really
> ugly. Any suggestions how to do it better? Thanks
> Nick
> ===========================================================
>
> class Contract < ActiveRecord::Base
>   belongs_to   :project
>   belongs_to   :status
>
>   def self.activity_find(team, director)
>     conditions = Array.new
>     conditions << "projects.team_id = #{service_team}" if
> service_team != "0"
>     conditions << "projects.director_id = #{bid_director}" if
> bid_director != "0"
>     ces = Array.new
>     for group in Status::GROUPS
>       conditions << "statuses." + Status.group_sql(group)
>       status_group = find(:all, :conditions => conditions.join(" AND
> "), :include => [:status])
>       conditions.delete( conditions.last )
>       ces << {:data => status_group, :name => group[:description]}
>     end
>   end
> end
>
> class Status < ActiveRecord::Base
>   has_many :contracts
>
>   GROUPS = [{:stage => 1, :description => "been entered as
> prospect"},
>             {:stage => 2, :description => "proposal has been
> submitted"},
>             {:stage => 3, :description => "been notified as won"},
>             {:stage => 4, :description => "been contracted"}]
>
>   def self.group_sql(group)
>     case group[:stage]
>     when 1 then 'opportunity=1'
>     when 2 then 'confirmed=1'
>     when 3 then 'notified=1'
>     when 4 then 'contracted=1'
>   end
> end

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