[英]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.