J'écris un luminaire pour ma table. Et l'une des colonnes prend une chaîne JSON comme valeur.
Le problème est que le luminaire ne se charge pas, car:
Fixture::FormatError: a YAML error occurred parsing /home/saurajeet/code/dcbox/test/fixtures/hardware.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html
The exact error was:
ArgumentError: syntax error on line 145, col 73: ` portslist: [{"name":"ob1","port_num":0,"port_type":"network"},{"name":"ob2","port_nu'.....
Toutes les solutions à cela.
Je crois que le prendre entre guillemets devrait faire l'affaire:
portslist: '[{"name":"ob1","port_type" ... }]'
le commentaire de Clarkevans sur la réponse acceptée a suggéré une meilleure réponse pour les longs morceaux de JSON, car vous pouvez envelopper les lignes. J'ai recherché la syntaxe scalaire de bloc qu'il a mentionnée et j'ai pensé inclure un exemple ici:
portslist: >
[{"name":"ob1","port_num":0,"port_type":"network"},
{"name":"ob2","port_nu...
Si vous avez la chaîne, vous pouvez utiliser aussi simple que Vlad Khomich l'a mentionné:
portslist: '[{"name":"ob1","port_num":0,"port_type":"network"},...]'
Si vous utilisez ERB et avez un objet, vous pouvez utiliser to_json et inspecter pour échapper à une chaîne JSON:
portslist: <%= [{name: 'ob1', port_num: 0, port_type: 'network'},...].to_json.inspect %>
Et si vous avez une grande spécification JSON, vous pouvez la stocker dans un fichier séparé et la charger à l'aide de Ruby, afin que vous puissiez garder votre fichier YAML propre:
portslist: <%= File.read('/path/to/file.json').inspect %>
Pour être complet: dans le cas où vous utilisez ActiveRecord::Store
, vous pouvez charger vos données simplement en utilisant la représentation YAML des mêmes données, même s'il s'agit d'un magasin JSON:
one:
portslist:
-
name: 'ob1'
port_num: 0
port_type: 'network'
-
name: 'ob2'
port_num: 1
port_type: 'network'
Dans ma table, la colonne stripe_connect est de type JSONB . Dans le luminaire, voici ce qui a fonctionné. Notez que les guillemets simples externes sont nécessaires, mais pas les crochets. Tout entre les guillemets simples est une longue ligne.
stripe_connect: '{"scope":"read_write", "livemode":false, "token_type":"bearer", "access_token":"sk_test_madeupvalue", "refresh_token":"rt_Ae29madeupvalueyX", "stripe_user_id":"acct_103yZabcdefg", "stripe_publishable_key":"pk_test_0HEOmadeupvalue"}'