Как мне отфильтровать или найти модель на основе метода в этой модели? - PullRequest
0 голосов
/ 09 июля 2010

У меня есть контроллер, который ищет набор контактов из таблицы контактов.В настоящее время это выглядит так:

 @contacts = @campaign.contacts.find(:all, :order => "date_entered ASC") 

Метод в contact.rb (Model) такой:

 def status
  return if statuses.empty?
  a= statuses.find(:last).status << ' (' << statuses.find(:last).created_at.to_s(:long) << ')' 
  return a
 end

По большей части, если в "есть значение"статус ", я больше не хочу отображать его в представлении.

В данный момент статус является полиморфным.Возможно, это была глупая идея, но я хотел, чтобы концепция статуса применялась в разных моделях:

class Status < ActiveRecord::Base
  attr_accessible :statusable_id, :statusable_type, :status

  belongs_to :statusable, :polymorphic => true

end

# == Schema Information
#
# Table name: statuses
#
#  id              :integer         not null, primary key
#  statusable_id   :integer
#  statusable_type :string(255)
#  status          :string(255)
#  created_at      :datetime
#  updated_at      :datetime
#

Я предполагаю, что если я смогу добавить это условие к экземпляру @contacts, это займетзаботиться об этом.Но я не знаю, как записать это условие в контроллер с помощью метода .find (если это правильный способ сделать это).

спасибо.

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

Я предполагаю, что contact has_many statuses.Я не уверен насчет остальной части приложения, но из кода, который вы дали выше, кажется, что вас интересует только последний статус, и, таким образом, вам лучше сделать статус и атрибут вместо has_manyассоциация
Однако, если предположить, что для какого-то другого требования вам нужна ассоциация has_many, в этом случае то, что вы сделали, кажется разумным.

0 голосов
/ 09 июля 2010

Чтобы расширить ответ NM, просто почему бы не установить контакт has_one latest_status, а затем найти с помощью опции: join? Это задокументировано на странице Active Record Base на http://api.rubyonrails.org/classes/ActiveRecord/Base.html,, просто ищите: joins.

Если вы выполните поиск в объединенной таблице, и вы уже определили связь как последний статус, то у вас будет то, что вы хотите, верно?

...