在belongs_to关联中搜索

时间:2011-12-20 22:20:51

标签: ruby-on-rails search associations

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

我有资产,在模型中:

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定义。我想搜索相应的资产表并获取具有特定标题的项目(然后将它们作为资产列表返回)。它将如何形成查询?我需要使用searchlogic吗?

1 个答案:

答案 0 :(得分: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或观看polymorphic associations上的Ryan Bates铁轨。

我期待进一步的信息。

##更新##

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

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

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

这里的关键,正如你将要阅读并向我解释的那样,是将这种类型的逻辑推送到模型(胖模型)并保持控制器很薄。

希望这有帮助!