Rails Globalize报错:Post类未定义translates方法
问题原因及解决方法
1. 未安装Globalize依赖库
translates方法并非Rails原生提供,而是由Globalize这个国际化库提供的核心方法,你需要先完成以下操作:
- 在项目的
Gemfile中添加:
gem 'globalize'
- 执行安装命令:
bundle install
2. 迁移文件存在语法错误
你的迁移文件有两处问题:
- 类名拼写错误:
TransalatePosts应改为TranslatePosts(缺少字母s) - Rails 6+的迁移中,
change方法内嵌套self.up和self.down是错误写法,需调整为:
class TranslatePosts < ActiveRecord::Migration[6.1] def up Post.create_translation_table!({ title: :string, body: :text }, { migrate_data: true, remove_source_columns: true }) end def down Post.drop_translation_table! migrate_data: true end end
3. 模型验证需适配翻译字段
由于迁移中设置了remove_source_columns: true,原表的title和body字段已被移除,直接验证:title和:body会引发错误,需调整为针对翻译字段的验证:
class Post < ApplicationRecord translates :title, :body # 指定需要验证的语言版本,示例为英文和中文 validates :title, presence: true, locale: [:en, :zh] validates :body, presence: true, locale: [:en, :zh] end
4. 需重启Rails服务器
安装新gem后,必须重启Rails服务器,否则新增的gem方法不会被加载,依然会出现undefined method报错。
内容的提问来源于stack exchange,提问作者Krapi Rastogi
相关产品推荐
相关产品推荐

