3

rubyonrailsプロジェクトのen.ymlファイルの属性名を変更しました。ボタンは正常に機能しています。ただし、フィールド属性は変更されていません。

これが私のモデルです、

class Enr::AffordableWarmth < ActiveRecord::Base
  self.table_name = "AffordableWarmth"
  self.primary_key = 'Record_No'

  validates_presence_of :No_Bedrooms, :No_Bedspaces, :Max_Annual_Energy_Cost
  validates :No_Bedrooms, uniqueness: { scope: :No_Bedspaces, 
    message: "already exists!" }
  validates_numericality_of :No_Bedrooms, :No_Bedspaces, :Max_Annual_Energy_Cost
end

en-GB.ymlファイル

en-GB:
  helpers:
    submit:
      enr_rds_dea:
        create: 'Create new user'
        update: 'Update'

      enr_affordable_warmth:
        create: 'Create'
        update: 'Update'

  activerecord:
      models:
        AffordableWarmth:
      attributes:
        AffordableWarmth:
          No_Bedrooms: "Number of Bedrooms"

それでも、レールコンソールとフォームには「寝室を空白にすることはできませんでした」と表示されます。コードのビットがアクティブレコードから機能していません。コードのビットが正常に機能する前。

4

1 に答える 1

3

を見てlib/active_model/errors.rb、キーは AffordableWarmth ではなく 'enr/affordable_warmth' であるべきだと思いますが、おそらく何らかの方法で "Enr" 名前空間を指定する必要があります。

動作しない場合は、インストールされている gem ソースをbundle show activemodelで見つけてから、デバッグをlib/active_model/errors.rb行って、期待される i18n キーを正確に見つけます。

アップデート:

これをデバッグする方法は次のとおりです。

翻訳を行う I18n を検索すると、generate_messageエラー メッセージ全体を生成する method が見つかります。これは、翻訳された属性名をパラメーターとして取り ( :attributekey を参照)、 method につながりますhuman_attribute_namelib/active_model/translation.rb.

次の行を追加します。

puts "human_attribute_name(#{attribute.inspect}, #{options.inspect}): defaults: #{defaults.inspect}"

の直前にI18n.translate、コンソールを起動します。

私が得るモデルの場合Foo::User

human_attribute_name("account_type", {}): defaults: [:"activerecord.attributes.foo/user.account_type", :"attributes.account_type", "Account type"]

したがって、これはあなたのために働くはずです:

  activerecord:
      attributes:
        "enr/affordable_warmth":
          no_bedrooms: "Number of Bedrooms"
于 2013-01-07T16:10:32.573 に答える