[英]Search in belongs_to 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嗎?
您是否有機會描述您想要達到的目標? 您有一個資產表。 看來這是您放置“標題”並返回LIKE搜索匹配的所有行的地方。
而且,與其列出多個belongs_to語句,不如讓它成為一個多態表:
class Asset < ActiveRecord::Base
belongs_to :assetable, :polymorphic => true
:
:
end
然后在其他每個模型中...
class Project < ActiveRecord::Base
has_many :assets, :as => :assetable
end
這樣,每個資產將在“資產”中具有可搜索的記錄。 使用指南或觀看在多態關聯上投射的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(這是另一個模型)。 您可以將它們顯示為鏈接,或使用此數據為返回的每個模型檢索其他信息,等等。
正如您將閱讀並向我解釋的那樣,此處的關鍵是將盡可能多的此類邏輯推入模型(胖模型),並使控制器保持精簡。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.