【问题标题】:How do I filter or find a Model based on a method in that Model?如何根据模型中的方法过滤或查找模型?
【发布时间】:2023-03-29 10:47:01
【问题描述】:

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

 @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 方法的控制器中编写该条件(如果这是正确的方法)。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    如果您搜索连接表,并且您已经将关系定义为最新状态,那么您就会得到您想要的,对吧?

    【讨论】:

    • 这是我得到的错误:SQLite3::SQLException: no such column: status.id
    • 我面前没有 SQLite3 文档,但我相信匹配空值的 where 子句将是“WHERE status.field IS NULL”。你问的是这个吗?
    【解决方案2】:

    我假设 contact has_many statuses 。我不确定应用程序的其余部分,但从您上面给出的代码来看,您似乎只对最后一个状态感兴趣,因此您最好制作状态和属性而不是has_many协会 。
    但是,假设您确实需要 has_many 关联,那么您所做的似乎是合理的。

    【讨论】:

    • 您好,但是作为条件我该怎么办?我不确定我会留下 has_many...我认为这将允许我跟踪状态更改时的任何更改...但不确定。我也在考虑通过多态使多个模型都可以状态......而不是拥有一个单独的属性。但是如果我这样做会简单得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多