Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么从固定装置加载的Rails数据被破坏?_Ruby On Rails_Fixtures - Fatal编程技术网

Ruby on rails 为什么从固定装置加载的Rails数据被破坏?

Ruby on rails 为什么从固定装置加载的Rails数据被破坏?,ruby-on-rails,fixtures,Ruby On Rails,Fixtures,我有两个地区和翻译的固定文件。 区域设置加载正常,但翻译中断: 固定装置 translation_05064: id: 5064 key: control.base_search_users.panel.title value: Поиск пользователей interpolations: locale: ru locale_id: 16 is_proc: false 成为记录: #<Translation id: 5064, key: "con

我有两个地区和翻译的固定文件。 区域设置加载正常,但翻译中断:

固定装置

translation_05064:
  id: 5064
  key: control.base_search_users.panel.title
  value: Поиск пользователей
  interpolations: 
  locale: ru
  locale_id: 16
  is_proc: false
成为记录:

#<Translation id: 5064, 
key: "control.base_search_users.panel.title", 
value: "Поиск пользователей", 
interpolations: nil, 
locale: nil, 
locale_id: 1019186233, 
is_proc: false>
翻译模式

class Translation < ActiveRecord::Base
  validates :key, :uniqueness => {:scope => :locale_id}
  validates :key, :locale, :locale_id, :value, :presence => true
  belongs_to :locale
  attr_accessible :key, :value, :locale_id, :locale
end
在translations.yml中,所有locale键值设置为locale_00016

translation_05064:
  id: 5064
  key: control.base_search_users.panel.title
  value: Поиск пользователей
  locale: locale_00016
  is_proc: false
是的,这很有效


翻译id引用了现有且正确的语言环境记录,但语言环境仍然为零,为了修复它,我运行了
Locale.find\u by\u code('ru')。translations.update\u all(:Locale=>'ru')
如果设置了
Locale\u id
,则看起来还可以<代码>区域设置将在您需要时由Rails填充(第一次请求时)。1019186233是创建装置时rais生成的id

大多数情况下,您不需要在fixture中指定id,rails会为您生成id,因此下面这样的fixture应该可以(您不应该在翻译fixture中同时定义
locale
locale\u id
):

locales.yml:

locale_00016:
  id: 16
  code: ru
  name: Русский
翻译.yml:


如果你在固件中删除空白<代码>插补< /代码>,还有问题吗?这可能会引起问题。您可以删除它或将其设置为
我尝试了这两种方法,删除插值行并指定空值“”。这并没有解决问题,但查看日志,我发现如果我从yml文件中删除插值行,插入中没有区域设置字段。我感到很困惑<代码>夹具插入(1.5ms)插入“翻译”(“id”、“key”、“value”、“locale\u id”、“is\u proc”)值(5502,“sites.index.title”、“Сааааааы”,1019186233,“f”)如果我从yml文件中删除插值和locale\u id行,locale\u id仍会出现在日志中。Rails自己添加了它:
Fixture Insert(0.9ms)插入到“translations”(“id”、“key”、“value”、“is_proc”、“locale_id”)值中(5503,“sites.menu.index”、“Саааааааафф”、“f”、“1019186233;”中)
问题是,区域设置记录获得的id值与fixtures yml文件中的id值。因此,在从yml fixture加载之后,所有应该属于Translation.find(16)的翻译都不属于任何现有的语言环境,而是属于不存在的语言环境。find(1019186233)。为什么?我觉得我没听清楚你的解释,好像我错过了一些非常重要的东西basic@zuba你有没有试着从区域设置和fixture中的翻译中删除id?我很抱歉回答晚了,Baldrick。我试图从yaml夹具文件中删除Locale.id、Translation.id和Translation.Locale\u id。加载后,Translation.location\u id具有所有记录的保存值,但该值与任何区域设置id都不匹配。此外,出于某种原因,Translation.Locale为nil,尽管在yaml文件中为“ru”。我想这是因为Fixture将名为locale的属性识别为对预期命名为ru的特定语言环境记录的命名引用。
locale_00016:
  id: 16
  code: ru
  name: Русский
translation_05064:
  id: 5064
  key: control.base_search_users.panel.title
  value: Поиск пользователей
  locale: locale_00016
  is_proc: false
ru:
  what_ever_attr: value
  ...
ru_title_translation:
  key: control.base_search_users.panel.title
  value: Поиск пользователей
  interpolations: 
  locale: ru
  is_proc: false