Как определить динамическую область в Ruby Sunspot? - PullRequest
2 голосов
/ 26 сентября 2011

Я хочу искать треки либо по "всем" фильтрам, либо по "любому из" фильтров.Итак, вот что я получил:

track_controller.rb

def search
  if params[:scope] == "any_of"
    Track.search do
      any_of do
        with(:name, "Thriller")
        with(:artist, "Michael Jackson")
      end

      with(:user_id, current_user.id)
    end
  elsif params[:scope] == "all_of"
    Track.search do
      all_of do
        with(:name, "Thriller")
        with(:artist, "Michael Jackson")
      end

      with(:user_id, current_user.id)
    end
end

Работает как положено.Но как изменить код, чтобы он стал СУХИМ?

1 Ответ

2 голосов
/ 26 сентября 2011

Вот он, сэр:

def search
  Track.search do

    mode = (params[:scope] == 'any_of' ? method(:any_of) : method(:all_of)) # don't use method(params[:scope]) for obvious security reason)

    mode.call do
      with(:name, "Thriller")
      with(:artist, "Michael Jackson")
    end

    with(:user_id, current_user.id)
  end
end
...