солнечное пятно с фреймворком i18n в рельсах 3.2

Я использую sunpost gem для поиска в моем проекте rails.

Теперь у меня есть два языка в моем приложении:

I18n.default_locale = :en
LANGUAGES = [
['English',
'en'],
["Español".html_safe, 'es']
]

У меня есть в моей модели post.rb языковой атрибут, который содержит значение "es" для испанского языка или значение "en" для английского. язык.

У меня есть в posts_controller в индексном действии следующий метод:

def index
   @search = Post.solr_search do |s|
     s.fulltext params[:search]
     s.keywords params[:search]
     s.order_by :created_at, :desc
     s.paginate :page => params[:page], :per_page => 20
   end

   @posts = @search.results

    respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @posts }
    format.js
  end 
 end

Я получаю текущий язык с помощью I18n.locale.to_s Я получаю с этим кодом "es" или "en"

У меня вопрос: как я могу отображать результаты только для того языка, который в настоящее время используется пользователем на моем веб-сайте?

Большое тебе спасибо!


person hyperrjas    schedule 01.05.2012    source источник


Ответы (1)


Было бы очень полезно, если бы вы могли опубликовать блок с возможностью поиска в модели публикации. Но до тех пор, я возьму удар на нем.

Ваша модель Post должна выглядеть примерно так:

class Post < ActiveRecord::Base
  searchable do
    ...
    string :language
    ...
  end
end

Где вы индексируете язык, на котором написано/хранится сообщение.

Затем ваш контроллер использует поле языка в качестве фильтра. Это должно выглядеть так:

def index
  @search = Post.search do |s|
    s.keywords params[:search]
    s.with(:language, I18n.locale.to_s) if I18n.locale.present?
    s.order_by :created_at, :desc
    s.paginate :page => params[:page], :per_page => 20
  end

  @posts = @search.results

  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @posts }
    format.js
  end 
end

и у вас есть это!

person vanhowen    schedule 04.07.2012