如何根据该模型中的方法过滤或查找模型?

时间:2010-07-09 18:43:01

标签: ruby-on-rails controller find conditional-statements

我有一个控制器正在从Contacts表中查找一组Contacts。目前它看起来像这样:

 @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 个答案:

答案 0 :(得分:2)

我假设contact has_many statuses。我不确定应用程序的其余部分,但是根据您上面给出的代码,您似乎只对最后一个状态感兴趣,因此您可能最好不要使用{{1关联。
但是,假设对于某些其他要求,您确实需要has_many关联,在这种情况下,您所做的事情似乎是合理的。

答案 1 :(得分:0)

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

如果您搜索已连接的表格,并且您已将该关系定义为最新状态,那么您可以拥有所需内容,对吧?