回答編集履歴

1

追記

2023/03/01 23:48

投稿

winterboum
winterboum

スコア23329

test CHANGED
@@ -6,3 +6,19 @@
6
6
 
7
7
  model の関連(とenumがあるならそれも)を載せてください。
8
8
 
9
+ 追記
10
+ Post の enum country、enum whiskey_type: はなんの役にも立っていません。Post に country、whiskey_type という integer な項目があるなら別ですが。
11
+ いまは 選択肢の定義として使っているようですが、それをするなら、model Country, WhiskeyType に定義すべきものです。
12
+
13
+ さて、、、
14
+ Country の field name が 'scotland ' だったら I18N で 'スコットランド' と表示する、というのは私の I18N力ではできません。
15
+ 思いつくのは
16
+ 1. name を string から enum なinteger にする。
17
+ 2. name を enum にするが、enum name: { scotland: 0, ireland: 1, , , } ではなく enum name: { scotland: 'scotland', ireland:, 'ireland', , , } にする
18
+
19
+ 1はできると思いますが、2は思いつきなのでできるかどうかはお試しを。
20
+ いずれにしても、Whiskey の産地が増える毎に 「Countryを増やす」のではなく、「enumを追加してから Countryを増やす」という、codeを触らなければならないのには強い違和感をいだきます。
21
+ I18N とはいえ、「フランス語やタイ語 などのサポートは考えておらず、英語と日本語だけ」でよいのなら name_en、name_jp とでもいうfieldを用意して、localeで切り分ける `def name; locale == :en ? name_en : name_jp ; end ` ほうがメンテはらくですね。
22
+ いや、サポート言語は徐々に増やすのだ、ということでしたら config/locale の yml ではなく 辞書tableを作るのかな。I18Nの辞書をconfig/locale以外から取り込むという方法があると思うので、それを発見できたら 辞書tableから取り込めば I18Nでできます。見つからなかったら decolaterかな
23
+
24
+