1

.ENVファイル内の変数に配列を割り当てることができません:が、私はそうのように、配列を作成し、.envファイルに変数に代入したい(レールアプリ)

FOOD=["cookies", "grapes", "cake", "pie"] 

をとその後、別のseed.rbファイルで、以下の例のように、オブジェクトのインスタンスを作成し、私のオブジェクトの属性を定義するには、「FOOD」配列を使用します。

User.create(name: "jane doe", favorite_foods: ENV["FOOD"]) 

これは動作しません。 。データベースをシードすると、このUserのインスタンスは作成されません。助けてください。私は "php"と "config"ファイルに関することを見てきましたが、これを達成するためのステップごとの詳細な説明はありません。

GithubまたはHerokuにアプリをプッシュするときに私が見せたくないものを私の.envに入れました。だから私は、私のアプリを展開/格納するパブリックスペースにFOOD配列を表示させたくないことに注意してください。ありがとう。

答えて

3

私は.envファイルから環境変数をロードするためにフォアマンやDotenvを使用することをお勧めします。 Railsのインストール手順(https://github.com/bkeepers/dotenv)に従ってください。

ここではキャッチがあります:私が知る限り、環境変数として配列を直接格納することはできません。あなたが代わりにできること - これは私がほとんどのアプリケーションで行うことです - カンマで区切られた文字列を使ってRubyで処理することです。例えば

:これはアレイにカンマで区切られた文字列を分割し、割り当てにそれを使用する

# .env 
FOOD=cookies,grapes,cake,pie 

# seeds.rb 
User.create!(
    name: "Jane Doe", 
    favorite_foods: ENV.fetch('FOOD').split(',') 
) 

。それはすぐに検証エラーが返されますよう(!付き).create!方法は、あなたのインスタンスが作成されていない理由をデバッグに役立つかもしれ使用

など

また、ここでは#fetchを使用すると、その環境変数を確保します存在していない場合はエラーをスローします。あなたがその環境変数が欠落していた場合は、デフォルトのリストにフォールバックすることをアプリに望んでいた場合

、あなたも使用できます。

ENV.fetch('FOOD', 'default,food,list').split(',') 
#=> ['default', 'food', 'list'] 
+0

は、この仕事を!おかげでマット!私はすでに "dotenv"宝石を使っていましたが、そこに配列がありました。コンマで区切られた文字列にして、それを私のseed.rbファイル内の配列に分割するこの方法は成功しました!! –

+0

素晴らしい!私の答えは受け入れられていると思いますか? – Matt

関連する問題