Ruby on rails 为什么';t形导轨'&引用;错误。完整的“U消息”;替换属性和消息变量?

Ruby on rails 为什么';t形导轨'&引用;错误。完整的“U消息”;替换属性和消息变量?,ruby-on-rails,ruby,validation,activerecord,internationalization,Ruby On Rails,Ruby,Validation,Activerecord,Internationalization,我刚刚创建的rails模型有一个奇怪的问题 以下是我的验证: validates_presence_of :from_name, :message => 'Please provide a from name.' validates_presence_of :from_email validates_presence_of :giftition_plan_id 我在使用错误时遇到问题。完整消息以及f.error\u消息在我的表单中: g = Giftition.create g.erro

我刚刚创建的rails模型有一个奇怪的问题

以下是我的验证:

validates_presence_of :from_name, :message => 'Please provide a from name.'
validates_presence_of :from_email
validates_presence_of :giftition_plan_id
我在使用
错误时遇到问题。完整消息
以及
f.error\u消息
在我的表单中:

g = Giftition.create
g.errors.first
=> ["from_name", "Please provide a from name."]
>> g.errors.full_messages
=> ["{{attribute}} {{message}}", "{{attribute}} {{message}}", "{{attribute}} {{message}}"]
我刚刚得到
“{{attribute}{{message}}”
。有什么想法吗

更新:我已经卸载了rails 3和所有随它一起安装的gems,这使得问题得以解决。但这不是一个解决方案。。。我仍然希望安装rails 3


更新:听起来升级到2.3.9解决了这个问题。不幸的是,我现在已经放弃了,但在将来的某个时候我会尝试。

我通过删除i18n-0.5.0在本地进行了修复

使用i18n-0.4.0进行实验会产生(同时返回正确插值的字符串):

我想0.5.0通过输出非插值字符串来增加痛苦


i18n是activesupport所必需的,因此我加载最新版本(0.5.0)的方法是:

在config/preinitializer.rb(“secret”生命周期挂钩,在activesupport之前加载):


升级到rails 2.3.9版修复了此问题

gem install -v 2.3.9 rails --include-dependencies
编辑:

您还需要编辑
config\environment.rb
文件来更改
RAILS\u GEM\u版本

RAILS_GEM_VERSION = '2.3.9'
编辑#2:


我应该注意到2.3.9版不是2.3.X分支的最新版本,您应该升级到可用的最新版本。

我在继承的旧2.3.5 Rails应用程序中也遇到了这个问题。我安装了i18ngem的5.0版本。我看到它需要%{}语法。在config/locales/en.yml中执行此操作实现了以下目的:


en:
  activerecord:
    errors:
      full_messages:
        format: "%{attribute} %{message}"

下面是我完整的config/locales/en.yml,它解决了属性、消息、计数和模型问题。我从RoR文档中得到了以下信息:

嗯: activerecord: 错误: 完整信息: 格式:“%{attribute}%{message}” 模板: 标题: 一:“1个错误禁止保存此%{model}”
其他:“%{count}错误禁止保存此%{model}”

因此我一直认为升级rails是解决此问题的方法

。。。或者您可以简单地将i18n降级为0.4版

如本文所述


转到ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.x/lib/active\u record/locale目录,编辑en.yml。。。将{variable}替换为%{variable}

为我工作


PS:也许这条路对你来说会不一样。为您的方便而进行调整。

我正在一台Rails 2.3.5服务器上工作,该服务器没有i18n gem。奇怪的是,虽然我的代码在本地工作,但我在工作服务器上遇到了这个问题。另外,我的另一个应用程序使用了相同的冻结gems,但在工作服务器上没有显示此问题

我像上面一样更改了activerecord en.yml文件,但也更改了actionpack en.yml文件,以获得正确的错误消息标题/标题:

   \vendor\rails\activerecord\lib\active_record\locale\en.yml

    #format: "{{attribute}} {{message}}"
     format: "%{attribute} %{message}"

    \vendor\rails\actionpack\lib\action_view\local\en.yml

      activerecord:
        errors:
          template:
            header:
              one:    "1 error prohibited this %{model} from being saved"
              other:  "%{count} errors prohibited this %{model} from being saved"     
另外,我也没有为此费心,但是如果您有包含计数的错误消息,那么在activerecord en.yml文件中,您也需要更改一些消息的语法(如:

cd
gem安装i18n-v0.4.0-i供应商/-v

要将i18n gem安装到供应商文件夹中(-V用于详细输出,只需查看引擎盖下的情况)

我刚刚想起我刚刚安装了rails 2.3.9和3.0.3。。。我的谷歌搜索说这肯定与此有关。。。虽然我找不到修复程序,但Ruby、Gems和Rails应该可以避免冲突问题,即使您安装了两个版本。如果您想删除Rails的一个版本,这很容易,不过您要小心删除不使用的版本,或者,如果您的项目是2.3.9,请升级到3.0+版本,然后执行删除操作
gem卸载rails-v2.3.9
i18n0.5.0是在我安装祖先gem时安装的(作为依赖项)。我在运行Rails 2.3.8时遇到了您描述的问题。我可以通过卸载i18n来修复这个问题,然后重新安装它,但强制版本为0.4.0。我相信这也是“修复”它的原因,但请注意“修复”在引号中。Rails 2.3.5也存在同样的问题。我执行了2.3.9版本的更新,现在一切正常。非常好!但现在我仍然会得到这样的信息:“{{count}}错误禁止保存这个{{model}}”,这听起来像是继承的资源问题。几个月前我确实看到了这一点,但不幸的是,我记不起确切的修复方法。假设你在组合中继承了资源,我会朝这个方向看。祝你好运@tybro0103:我也和你有同样的问题,现在我得到了解决。请查看i18n gem的gem列表,并在删除后尝试重新启动应用程序。或者使用i18n0.4.0版本。希望它能起作用。这种技术是否需要在“vendor/”下安装整个Rails gem,或者只需添加特定的“en.yml”文件,它们就会被选中并覆盖标准Rails区域设置?

en:
  activerecord:
    errors:
      full_messages:
        format: "%{attribute} %{message}"
   \vendor\rails\activerecord\lib\active_record\locale\en.yml

    #format: "{{attribute}} {{message}}"
     format: "%{attribute} %{message}"

    \vendor\rails\actionpack\lib\action_view\local\en.yml

      activerecord:
        errors:
          template:
            header:
              one:    "1 error prohibited this %{model} from being saved"
              other:  "%{count} errors prohibited this %{model} from being saved"     
#too_long: "is too long (maximum is {{count}} characters)"
too_long: "is too long (maximum is #{count} characters)"
cd <yourRailsProject> 
gem install i18n -v 0.4.0 -i vendor/ -V