小编Luk*_*oda的帖子

如何翻译ActiveRecord模型类名?

当我有一个实例时,获取ActiveRecord模型类的翻译名称的最简单方法是什么?

例如 - 我有这样的模型类:

class Category < ActiveRecord::Base
  ...
end
Run Code Online (Sandbox Code Playgroud)

我有一个类的实例:

category = Category.first
Run Code Online (Sandbox Code Playgroud)

我有YAML文件config/locales/cs.yml:

cs:
  activerecord:
    models:
      category: Kategorie
Run Code Online (Sandbox Code Playgroud)

我需要动态地做这个,即使我以前不知道我将要处理的模型类实例.所以我不想明确指定"activerecord.models.category".

是否有捷径可寻?我知道,我可以做这样的事情

"activerecord.models.#{category.class.name.underscore}"
Run Code Online (Sandbox Code Playgroud)

但必须有更好的方法来做到这一点.

activerecord ruby-on-rails internationalization

44
推荐指数
1
解决办法
3万
查看次数

创建schema_migrations的Rails - Mysql2 ::错误:指定的键太长了

我正在使用Rails 3.2.6和Mysql 6.0.9(但我在MySQL 5.2.25上有完全相同的错误)

当我创建新的数据库(rake db:create)然后当我尝试加载模式(rake schema:load)时,我收到此错误:

Mysql2::Error: Specified key was too long; max key length is 767 bytes: CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)
Run Code Online (Sandbox Code Playgroud)

经过几个小时的研究,我找到了以下解决方案:

1.将MySQL变量innodb_large_prefix更改为true(或ON)

这没用.我在我的Linux服务器,我的Mac甚至Windows上试过它 - 它只是不起作用.

2. Monkeypatch ActiveRecord :: SchemaMigration.create_table

我不需要version列长为255(当它是UTF-8时,它需要4*255 = 1020字节并且超过了密钥的767字节的MySQL限制).我也不需要它是UTF-8,但DB中的所有其他表都是UTF-8,我已将utf8_czech_ci设置为默认排序规则.

实际创建schema_migrations表的方法如下所示:

def self.create_table
  unless connection.table_exists?(table_name)
    connection.create_table(table_name, :id => false) do |t|
      t.column :version, :string, :null => false
    end
    connection.add_index table_name, :version, :unique => true, :name => index_name
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以在Github rails/rails上读取整个文件

所以我试着添加:limit …

mysql activerecord ruby-on-rails rails-migrations

7
推荐指数
2
解决办法
7317
查看次数