[英]Why Rails data loaded from Fixtures are broken?
我有兩個關於“語言環境”和“翻譯”的Fixture文件。 語言環境可以很好地加載,但是翻譯會被破壞:
治具
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>
由於某種原因,對於文件中的每個夾具, locale而不是'ru'都變為nil,而locale_ib而不是16變為1019186233 。
我以這種方式加載燈具:
require 'active_record/fixtures'
ActiveRecord::Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'test', 'fixtures')
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }
ActiveRecord::Fixtures.create_fixtures(fixtures_folder, fixtures)
翻譯模型
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
遷移
class CreateTranslations < ActiveRecord::Migration
def change
create_table :translations do |t|
t.string :key
t.text :value
t.text :interpolations
t.string :locale
t.integer :locale_id
t.boolean :is_proc, :default => false
end
add_index :translations, [:key, :locale]
end
end
我在插入數據庫的test.log中看到包含損壞的數據。 當我將夾具文件加載到YAML.load_file 'test/fixtures/translations.yml'
rails concl中時,我得到了正確的哈希數據。
為什么會這樣? 如何解決? Rails-2.3.8 , PostgreSQL 8.4
更新:嘗試命名燈具。 在locales.yml中:
locale_00016:
id: 16
code: ru
name: Русский
並在translations.yml中將所有區域設置鍵值設置為locale_00016
translation_05064:
id: 5064
key: control.base_search_users.panel.title
value: Поиск пользователей
locale: locale_00016
is_proc: false
是的,那行得通!
翻譯ID引用了現有的正確的Locale記錄,但是語言環境仍然為零,要修復它,我運行Locale.find_by_code('ru').translations.update_all(:locale => 'ru')
如果設置了locale_id
,看起來還可以; 需要時(第一次請求時),Rails將填充locale
。 1019186233是rais在創建固定裝置時生成的ID。
大多數時候,您不需要在固定裝置中指定ID,Rails會為您生成ID,因此,如下所示的固定裝置就可以了(您不應在Translation固定裝置中同時定義locale
和locale_id
):
locales.yml:
ru:
what_ever_attr: value
...
translations.yml:
ru_title_translation:
key: control.base_search_users.panel.title
value: Поиск пользователей
interpolations:
locale: ru
is_proc: false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.