标签: globalize3

未定义的方法`create_translation_table!'

我有一个新的rails引擎,我想使用globalize3.我在我的lib // engine.rb中做了这个:

require 'globalize3'

module SimpleCms
  class Engine < ::Rails::Engine
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,我尝试创建这样的迁移:

class CreatePages < ActiveRecord::Migration
  def up
    create_table :pages do |t|
      t.string :path
      t.timestamps
    end
    Page.create_translation_table! title: :string, body: :body
  end

  def down
    drop_table :pages
    Page.drop_translation_table!
  end
end
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

undefined method `create_translation_table!' for #<Class:0x00000001d5ca18>
Run Code Online (Sandbox Code Playgroud)

我认为没有加载文件'lib/globalize/active_record/migration.rb'.

有解决方案吗

ruby-on-rails globalize3

9
推荐指数
1
解决办法
2527
查看次数

使用Globalize&Friendly_id将同一页面重定向到不同的语言

过去几个小时我一直在摸不着头脑,寻找答案,但我找不到任何地方.

我的宝石文件:

# Use globalize for translating models
gem "globalize", github: "ncri/globalize" # for Rails 4.2
gem 'globalize-accessors', '~> 0.1.5'

# Use friendly_id for slugs
gem 'friendly_id', '~> 5.1.0'
gem 'friendly_id-globalize', '~> 1.0.0.alpha1'
Run Code Online (Sandbox Code Playgroud)

情况如下:

我有两种语言"en"和"fr"

2个模型:pages和pages_translations页面有一个slug列,pages_translations也有一个slug列.

如果我查看页面 - > en/pages/slug-en,它可以工作.

如果我查看页面 - > fr/pages-slug-fr,它可以工作.

所以我假设friendly_id和globalize已正确配置.

但是我的问题是我不能使用以下语言切换器:

  <% if I18n.locale != :en %>
    <li>
    <%= link_to t('menu.languages.short_en'), url_for(locale: 'en') %>
    </li>
<% end %>
Run Code Online (Sandbox Code Playgroud)

路线变为en/pages/slug-fr(即语言改变但不是slug).

我在初始化程序中激活了config.use:finders.

我的页面模型:

translates :title, :slug, :blurb, :content, :seo_title, :seo_description, :seo_keywords
  globalize_accessors :locales => [:en, :fr], :attributes …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails friendly-id globalize3 globalize ruby-on-rails-4.2

7
推荐指数
1
解决办法
824
查看次数

同一列中列的翻译

我有小桌子:

create_table :cities do |t|
  t.string :name
end
Run Code Online (Sandbox Code Playgroud)

我需要国际化"名称"列,我不想为此创建单独的表.是否可以将翻译列添加到"城市"表中?结果我希望这个表的迁移看起来像这样:

create_table :cities do |t|
 t.string :en_name
 t.string :de_name
 t.string :fr_name
end
Run Code Online (Sandbox Code Playgroud)

目前我正在尝试使用"globalize"gem,也许我应该使用其他解决方案,请指教.

ruby-on-rails internationalization globalize3 rails-i18n globalize

6
推荐指数
1
解决办法
322
查看次数

使用globalize3获取数据时,ActiveRecord StatementInvalid

当我试图通过指定的艺术家获取所有音频歌曲时,我收到错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  column reference "artist" is ambiguous
LINE 1: ... AND (audio_translations.artist IS NOT NULL) AND (artist = '...
                                                             ^
: SELECT "audios"."id" AS t0_r0, "audios"."audio_genre_id" AS t0_r1, "audios"."song" AS t0_r2, "audios"."artist" AS t0_r3, "audios"."file_id" AS t0_r4, "audios"."photo_id" AS t0_r5, "audios"."description" AS t0_r6, "audios"."position" AS t0_r7, "audios"."created_at" AS t0_r8, "audios"."updated_at" AS t0_r9, "audios"."date" AS t0_r10, "audio_translations"."id" AS t1_r0, "audio_translations"."audio_id" AS t1_r1, "audio_translations"."locale" AS t1_r2, "audio_translations"."artist" AS t1_r3, "audio_translations"."song" AS t1_r4, "audio_translations"."description" AS t1_r5, "audio_translations"."created_at" AS t1_r6, "audio_translations"."updated_at" AS …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails globalize3

5
推荐指数
1
解决办法
993
查看次数

在Rails中对Globalize3表进行简单搜索

我想在Ruby on Rails上使用globalize3 gem时实现一个简单的搜索功能.由于模型的转换存储在单独的表中,因此下面的代码不起作用,因为products表中不再有:name字段.如何调整下面的代码以使搜索功能正常?

products_controller.rb

 @products = Product.search(params[:search]).all
Run Code Online (Sandbox Code Playgroud)

index.html.erb

 <%= form_tag products_path, method: :get do %>   
   <%= text_field_tag :search, params[:search] %>
   <%= submit_tag "Search", name: nil %>      
 <% end %>
Run Code Online (Sandbox Code Playgroud)

模型

class Product < ActiveRecord::Base
  translates :name
  attr_accessible :name, :price, :released_at

  def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

search ruby-on-rails ruby-on-rails-3 globalize3

5
推荐指数
1
解决办法
2354
查看次数

Rails装置似乎不在Globalize3转换表中存储值

我有一个使用Globalize3 0.3.0的Rails 3.2.7项目
看起来,如果你为一个具有用Globalize3翻译的属性的模型制作一个fixture,那么fixture会在数据库中填充模型的表,而不是使用的转换表通过Globalize3.
因此,如果在单元测试中使用模型,则找不到已翻译属性的值.如果此属性具有在线状态验证规则,则会使模型无效.
我有一个解决方法,包括使用单元测试的全局设置,明确设置夹具模型的翻译属性.但这不是一个好的解决方案.
有什么方法可以解决这个问题吗?

fixtures ruby-on-rails-3.2 globalize3

5
推荐指数
0
解决办法
207
查看次数

Rails:friendly_id&globalize不检查转换表是否存在冲突

我在我的Rails 3.2.14应用程序中使用了friendly_id(4.10.1)和globalize(3.0.0):

# globalize3
translates :title, :slug

# friendly_id    
extend FriendlyId
friendly_id :title, use: [:slugged, :globalize]
Run Code Online (Sandbox Code Playgroud)

当我保存输入时,friendly_id检查slug碰撞:

SELECT "pages".* FROM "pages" WHERE
("slug" = 'my-title' OR "slug" LIKE 'my-title--%') AND (id <> 1)
ORDER BY LENGTH("slug") DESC, "slug" DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

Friendly_id应该使用转换表page_translations,因为pages当您使用多个语言环境时,原始表中的条目有点随机.

这就是问题所在:friendly_id只识别一种语言/语言环境的slug冲突.

有没有人知道如何更改完整全球化支持的查询?非常感谢你提前!

friendly-id ruby-on-rails-3 globalize3

5
推荐指数
0
解决办法
728
查看次数

如何避免Globalize3将属性的回退转换返回到特定上下文?

我正在使用Globalize3和easy_globalize_accesors进行网站的国际化/本地化工作,现在我正在调整表单以管理具有可能翻译的字段.假设我有一个名为Role的类:

class Role  
  translates :name, :fallbacks_for_empty_translations => true
  # rest of class definition
Run Code Online (Sandbox Code Playgroud)

我这样做是因为我想显示默认翻译,如果没有翻译或在当前语言环境中为空,这可以按预期工作.
但是,在我的形式中,我想要相反:我希望每个输入引用不同的语言环境而不是默认语言环境,以显示没有值,除非在role_translations表中有该属性的值.这是我创建输入的方式:

<%= textfield 'role', "name_#{locale}", :class => ... %> 
Run Code Online (Sandbox Code Playgroud)

目前,我发生的情况是,如果我创建了一个只有默认语言环境翻译的新角色,当我想编辑角色以将翻译添加到其他语言环境时,每个输入都会显示默认翻译的值.
提前致谢

fallback ruby-on-rails internationalization globalize3

5
推荐指数
1
解决办法
1535
查看次数

通过翻译的属性全球化3个订单记录并考虑回退

我有令人敬畏的Globalize3宝石的麻烦.现在我有两种语言:en和:ru.并且:ru回归:恩喜欢这个

#/config/initializers/globalize.rb
Globalize.fallbacks = {:ru => [:ru, :en]}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我试图通过名称翻译或翻译后备值对翻译记录的整个集合进行排序.但with_translations()似乎没有给我这样的机会!

Country.with_translations(:ru).order('country_translations.name ASC')
#this filters out those who have no :ru translations (BUT THEY SHOLD USE FALLBACKS!)
Run Code Online (Sandbox Code Playgroud)

所以要检索我可以传递一系列语言环境的所有记录:

Country.with_translations([:ru, :en]).order('country_translations.name ASC')
#but this completely ruins the sorting order (DAMN NOTHING IS SORTED)
Run Code Online (Sandbox Code Playgroud)

我想要的唯一简单的事情就是获得后备并整理所有东西!所以我们需要以某种方式获取所有记录,只按可用的名称值排序.

有什么办法吗?

activerecord fallback ruby-on-rails globalize3

4
推荐指数
1
解决办法
2633
查看次数

Rails、Globalize3 检查翻译的属性是否改变?

在 Rails 中,我们可以使用obj.field_changed?.

假设我有一个使用Globalize3.

它有 translates :name

如何检查 name 属性是否已更改?

就像是 obj.name_changed?

ruby-on-rails globalize3

4
推荐指数
1
解决办法
864
查看次数