对不起初学者的问题,但我觉得很难理解:
我有资产,在模型中:
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吗?
答案 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(这是另一个模型)。您可以将这些显示为链接或使用此数据来检索返回的每个模型的其他信息等。
这里的关键,正如你将要阅读并向我解释的那样,是将这种类型的逻辑推送到模型(胖模型)并保持控制器很薄。
希望这有帮助!