【问题标题】:Search in belongs_to associations在 belongs_to 关联中搜索
【发布时间】:2011-12-20 22:20:50
【问题描述】:

对不起初学者的问题,但我觉得很难理解:

我有资产,在模型中:

class Asset < ActiveRecord::Base

    belongs_to :project
    belongs_to :image
    belongs_to :text
    belongs_to :link
    belongs_to :video
    belongs_to :audio

def self.search(search)
   if search
       where('title LIKE ?', "%#{search}%")
     else
       scoped
   end
 end
end

每种资产类型在其模型中都有自己的表和has_many :assets 定义。我想搜索相应的资产表并获取具有特定标题的项目(然后将它们作为资产列表返回)。它将如何制定查询?我需要使用搜索逻辑吗?

【问题讨论】:

  • 我相信这将受益于改变与polymorphic的关系

标签: ruby-on-rails search associations


【解决方案1】:

您是否有机会描述更多您想要实现的目标?您有一个资产表。看来这是您放置“标题”并返回您的 LIKE 搜索匹配的所有行的位置。

您可能希望将其设为多态表,而不是列出多个 belongs_to 语句:

class Asset < ActiveRecord::Base

  belongs_to :assetable, :polymorphic => true
  :
  :
end

然后在其他每个模型中......

class Project < ActiveRecord::Base
  has_many :assets, :as => :assetable
end

这样,每个资产都会在资产中具有可搜索的记录。使用guides 或观看Ryan Bates 在polymorphic associations 上的轨道。

我期待更多信息。

## 更新##

在您的资产模型中,创建一个类方法(例如搜索),如下所示:

def self.search(params) # these are from your search form
  self.where("title like ?", "%#{params[:search]}%"
end

Params[:search] 是表单的参数,资产模型检索所有匹配的记录。您的数据集将具有assetable_id 和assetable_type(这是另一个模型)。您可以将这些显示为链接或使用此数据来检索每个返回的模型的附加信息等。

这里的关键,正如你将读到的并且已经向我解释过,是将尽可能多的这种类型的逻辑推送到模型(胖模型)并保持你的控制器瘦。

希望这会有所帮助!

【讨论】:

  • 谢谢,每个资产都有不同的字段,所以对于 'text' 它将是 'body' , 'excerpt' 对于 'image' - 'url' 等,但都有标题字段。我想搜索所有内容。我换了联想。到多态,但仍然不确定格式化查询
  • 让我看看查询部分...您只是希望能够搜索与多态表关联的每个表,对吗?
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多