我对Rails中的gem有一点问题。我已经安装了i18n-active_record gem(使用rails 4和ruby 2)。在我的宝石文件中
gem 'i18n-active_record',
:git => 'git://github.com/svenfuchs/i18n-active_record.git',
:require => 'i18n/active_record'
这也需要模型翻译,所以我有一个模型和一个迁移
class CreateTranslations < ActiveRecord::Migration
def self.up
create_table :translations do |t|
t.string :locale
t.string :key
t.text :value
t.text :interpolations
t.boolean :is_proc, :default => false
t.timestamps
end
end
def self.down
drop_table :translations
end
end
现在我可以运行bundle install,并安装gem。但是,如果我尝试运行rake db:migrate,我会收到错误
PG::Error: ERROR: relation "translations" does not exist (and some other stuff)
在我的本地服务器上,我首先运行迁移,然后将gem添加到gemfile并运行bundle install。但是gem不能在gemfile中,因为如果它不能运行rake migrate,因为gem文件不是最新的。
但是现在我想在Heroku(或任何其他服务器)上推送它,我真的不想每次都这样做。我有办法绕过这个循环吗?
修改
我在github上得到了答案。我只需要这样做:
require 'i18n/backend/active_record'
if ActiveRecord::Base.connection.table_exists? 'translations'
I18n.backend = I18n::Backend::ActiveRecord.new
I18n::Backend::ActiveRecord.send :include, I18n::Backend::Memoize
I18n::Backend::ActiveRecord.send :include, I18n::Backend::Flatten
I18n::Backend::Simple.send :include, I18n::Backend::Memoize
I18n::Backend::Simple.send :include, I18n::Backend::Pluralization
I18n.backend = I18n::Backend::Chain.new I18n::Backend::Simple.new, I18n.backend
end
答案 0 :(得分:1)
我已解决此问题我需要在初始化程序中添加if表(locale.rb)
require 'i18n/backend/active_record'
if ActiveRecord::Base.connection.table_exists? 'translations'
I18n.backend = I18n::Backend::ActiveRecord.new
I18n::Backend::ActiveRecord.send :include, I18n::Backend::Memoize
I18n::Backend::ActiveRecord.send :include, I18n::Backend::Flatten
I18n::Backend::Simple.send :include, I18n::Backend::Memoize
I18n::Backend::Simple.send :include, I18n::Backend::Pluralization
I18n.backend = I18n::Backend::Chain.new I18n::Backend::Simple.new, I18n.backend
end