繁体   English   中英

pg_search和Rails的本地化

[英]pg_search and localization in rails

我正在使用pg_search,并且在本地化方面遇到了一些麻烦。 我有具有title1,title2,description1,description2属性的shop_item模型。 取决于语言,我正在使用title1 + description1或title2 + description2的组合在应用程序控制器中,我有一种设置语言环境的方法:

class ApplicationController < ActionController::Base
        before_action :set_locale
    private

        def set_locale
            I18n.locale = params[:locale] || I18n.default_locale
        end
end

ShopItemsController:

def index
    if params[:search].present?
      @shop_items = ShopItem.search_for_items(params[:search]).paginate(:page => params[:page], :per_page => 32).order('created_at DESC')
    else
      @shop_items = ShopItem.all.paginate(:page => params[:page], :per_page => 32).order('created_at DESC')
    end
  end

在我的shop_items / index.html.erb中,我有:

          <%= form_tag shop_items_path, :method => 'get'  do %>
          <%= text_field_tag :search, params[:search], autofocus: true,  type: "text", placeholder: 'search for messages'%>
          <%= submit_tag "search", type: "submit"%>
          <% end %>  

</br>
<% if current_page?(locale: :ua)%>
  <div class="row">    
    <% @shop_items.each do |si| %>

        <div class="col m3 ">
          <div class="card hoverable">
            <div class="card-image">
              <%= image_tag si.shop_image.url(:large) %>        
            </div>
            <div class="card-content"-->
              <span class="card-title truncate"><td><%= si.title1 %></td></span>
              <p><%= t(:price)%>: <%= si.price%></p>
            </div>
            <div class="card-action">
              <%= link_to t(:details), shop_item_path(si) %>
              <%= link_to t(:edit), edit_shop_item_path(si) if current_user.present? and current_user.admin? %>
              <%= link_to t(:destroy), si, method: :delete, data: { confirm: 'Are you sure?' } if current_user.present? and current_user.admin? %>
            </div>
          </div>
        </div>
    <% end %>
  </div>
<% end %>

如果我要去shop_items_path,则在浏览器中默认看到下一个URL:

http://localhost:3000/shop_items?locale=ua

我可以看到我所有的shop_items,但是如果要从url中删除语言环境,例如:

  http://localhost:3000/shop_items

所有项目都消失了当我使用搜索时,我的网址如下:

http://localhost:3000/shop_items?utf8=%E2%9C%93&search=item&commit=search

如您所见,语言环境缺失,因此搜索后我可以看到所有shop_items。

我的问题是如何存储当前语言环境并将其包含在搜索查询中?

感谢您的解决方案!

更新:Rails.application.routes.draw执行root:to =>'shop_items#index'资源:shopping_contacts资源:cart_items

resources :shopping_carts do
    #resources :contact_infos
    resources :shopping_contacts
    resources :cart_items
    resources :cart_confirms
end
resources :shop_items do
    resources :cart_items
end

resources :contact_us
resources :contacts, only: [:new, :create, :edit, :update, :index, :destroy]  

get 'password_resets/new'

get 'password_resets/edit'

get 'sessions/new'
get    '/login',   to: 'sessions#new'
post   '/login',   to: 'sessions#create'
delete '/logout',  to: 'sessions#destroy'
resources :account_activations, only: [:edit]
resources :password_resets,     only: [:new, :create, :edit, :update]


get  '/signup',  to: 'users#new'
post '/signup',  to: 'users#create'  
resources :users

resources :main_shots

结束

Ok认为需要更新,也许您应该遵循以下步骤。

首先将您的路线嵌套在'scope'(:locale)',语言环境:/ en | es / do:'这样。

Rails.application.routes.draw do 
 scope '(:locale)', locale: /en|es/ do


  root :to => 'shop_items#index' 
  resources :shopping_contacts 
  resources :cart_items

  resources :shopping_carts do
    #resources :contact_infos
    resources :shopping_contacts
    resources :cart_items
    resources :cart_confirms
  end

  resources :shop_items do
    resources :cart_items
  end

  resources :contact_us
  resources :contacts, only: [:new, :create, :edit, :update, :index, :destroy]  

  get 'password_resets/new'

  get 'password_resets/edit'

  get 'sessions/new'
  get    '/login',   to: 'sessions#new'
  post   '/login',   to: 'sessions#create'
  delete '/logout',  to: 'sessions#destroy'
  resources :account_activations, only: [:edit]
  resources :password_resets,     only: [:new, :create, :edit, :update]


  get  '/signup',  to: 'users#new'
  post '/signup',  to: 'users#create'  
  resources :users

  resources :main_shots
 end
end

第二步,像在application_controller.rb中那样添加此方法:

  before_action :set_locale

  def set_locale
    I18n.locale = params.fetch(:locale, I18n.default_locale).to_sym
  end

  def default_url_options
    { locale: I18n.locale == I18n.default_locale ? nil : I18n.locale }
  end

最后一步,您是否在application.rb中设置了defautl local?

config.i18n.default_locale = :en

给我您的反馈,祝您好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM