2010-07-09 2 views
0

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

@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

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

+0

Привет, но что я делаю как условие? Я не уверен, что останусь has_many ... Я * думаю * это позволит мне отслеживать любые изменения по мере изменения статуса ... но не уверен. Я также думал о том, чтобы создать несколько моделей, которые можно было бы контролировать с помощью полиморфных ... а не иметь отдельный атрибут. Но было бы намного проще, если бы я это сделал. – Angela

0

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

Если вы просматриваете объединенную таблицу, и вы уже определили, что отношения уже являются последним, тогда у вас будет то, что вы хотите, правильно?

+0

Привет, у меня все еще нет условия .... я бы использовал статус? НОЛЬ? пустой? – Angela

+0

Вот ошибка, которую я получаю: SQLite3 :: SQLException: no такой столбец: status.id – Angela

+0

У меня нет документов SQLite3 передо мной, но я считаю, что предложение where, чтобы соответствовать нулевому значению, было бы «WHERE status.field IS NULL ". Это то, о чем вы спрашиваете? – jasonpgignac