Поиск в принадлежащих ассоциациях - PullRequest
0 голосов
/ 21 декабря 2011

извините за вопрос новичка, но мне трудно понять:

У меня есть активы, в модели:

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 Ответ

1 голос
/ 21 декабря 2011

Есть ли шанс, что вы опишите немного больше, чего вы пытаетесь достичь?У вас есть таблица активов.Похоже, что именно здесь вы должны поместить «заголовок» и вернуть все строки, в которых совпадает ваш поиск LIKE.

И вместо перечисления нескольких операторов принадлежащих вам, вы можете вместо этого сделать эту таблицу полиморфной:

class Asset < ActiveRecord::Base

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

И затем в каждой из других моделей ...

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

Таким образом, каждый актив будет иметь доступную для поиска запись в активах.Используйте направляющие или посмотрите, как рельсы Райана Бейтса наложены на полиморфные ассоциации .

Я с нетерпением жду дополнительной информации.

## ОБНОВЛЕНИЕ##

Внутри вашей модели активов создайте метод класса (например, поиск) следующим образом:

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

Params [: search] - это параметры формы вашей формы, аМодель активов извлекает все записи, которые соответствуют.Ваш набор данных будет иметь монтируемые тип_схемы и тип_схемы (это другая модель).Вы можете отобразить их в виде ссылок или использовать эти данные для получения дополнительной информации для каждой возвращаемой модели и т. Д.

Ключ, о котором вы прочтете и который мне объяснили, заключается в том, чтобы нажать как можно большую часть этой информации.тип логики для модели (толстые модели) и держать ваши контроллеры тонкими.

Надеюсь, это поможет!

...