0

У меня есть что-то вроде следующей в Rails 4 приложения: сRails 4 + Веснушка: поиск вещи Пользователь «понравившаяся» их атрибуты (полиморфный has_many через ассоциацию)

class Like < ActiveRecord::Base 
    belongs_to :liker, class_name: 'User' 
    belongs_to :likeable, polymorphic: true 
end 

class Photo < ActiveRecord::Base 
    # has a `title` and `description` attributes 
    has_many :likes, as: likeable 
    has_many :likers, through: :likes 
end 

class Song < ActiveRecord::Base 
    # has a `title` and `description` attributes 
    has_many :likes, as: likeable 
    has_many :likers, through: :likes 
end 

class Video < ActiveRecord::Base 
    # has a `title` and `description` attributes 
    has_many :likes, as: likeable 
    has_many :likers, through: :likes 
end 

class User < ActiveRecord::Base 
    has_many :likes, source: :liker 
    has_many :liked_photos, through: :likes, source: :likeable, source_type: 'Photo' 
    has_many :liked_videos, through: :likes, source: :likeable, source_type: 'Video' 
    has_many :liked_songs, through: :likes, source: :likeable, source_type: 'Song' 
end 

Я хотел бы иметь где текущий пользователь может искать фотографии, песни и видео по своим title или description, но результаты могут быть ограничены только теми, которые ему понравились. Я прочитал некоторые другие сообщения, касающиеся поиска has_many, но я запутался в полиморфной стороне вещей. Я думал, поиск будет что-то вроде этого:

@search = Sunspot.search(Photo, Song, Video) { fulltext params[:term] } 

Но тогда я запутался, как сфера его current_user.likes. Или следует искать на модели Like? Например:

@search = Like.search { fulltext params[:term] } 

Что должно быть включено в методе searchable, и в какой модели (ей) делает это лучше всего принадлежит?

ответ

0

Вот что я в конечном итоге делает:

class Like < ActiveRecord::Base 
    searchable do 
    text :likeable_title do 
     likeable.title 
    end 
    text :likeable_description do 
     likeable.description 
    end 
    integer :liker_id 
    end 
end 

Тогда я мог бы сделать следующий запрос в контроллере

@search = Like.search(include: :likeable) do 
      fulltext params[:term] 
      with :liker_id, current_user.id 
      end 

я могу затем сделать вид, используя likeable для каждого результата. Дайте мне знать, если у вас есть лучший способ или если что-то я не рассматриваю ...

+0

если вы не возражаете, не могли бы вы пересмотреть мой вопрос, связанный с вашей проблемой? http://stackoverflow.com/questions/42345963/rails-sunspot-with-polymorphic-association – LearningROR

+0

@LearningROR, я не работал с Rails или Sunspot последние пару лет, поэтому я, вероятно, не очень хороший ресурс с этой точки зрения. – robertwbradford

Смежные вопросы