2010-07-09 43 views
0

我有一个控制器正在从联系人表中查找一组联系人。目前,它看起来像这样:如何根据该模型中的方法过滤或查找模型?

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

在contact.rb(模型)的方法是这样的:

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 2010-07-09 22:51:12

0

为了扩大NM的答案,为什么不联系has_one latest_status关系,然后找到使用:join选项?它记录在Active Record Base页面http://api.rubyonrails.org/classes/ActiveRecord/Base.html,只需搜索:连接。

如果你搜索连接表,并且你已经定义了关系已经是最新的状态,那么你会有你想要的,对吧?

+0

嗨,我还没有条件....我会使用状态是?空值?空白? – Angela 2010-07-09 22:52:14

+0

这里是我得到的错误: SQLite3 :: SQLException:没有这样的列:status.id – Angela 2010-07-10 23:03:54

+0

我没有SQLite3文档在我面前,但我相信where子句匹配一个空值将是“WHERE status.field IS NULL“。你在问什么? – jasonpgignac 2010-07-11 13:04:58