0

SOQLクエリの結果をJSONで返したいのですが、データが文字列で返されてしまうようです。

client = SFDC_Adapter.login
data = client.query("SELECT  MarkupAmount__c, 
                        MarkupPercent__c,
                        Product_Type_Id__c,
                        Product_Type__c 
                        FROM Product_Type__c 
                        WHERE Product_Type_Id__c = #{product_type_id}")
p data

=> [#<Product_Type__c:0x00000001c356f8 @Id=nil, @OwnerId=nil, @IsDeleted=nil, @Name=nil, @CreatedDate=nil, @CreatedById=nil, @LastModifiedDate=nil, @LastModifiedById=nil, @SystemModstamp=nil, @MarkupPercent__c=5.0, @Subscription__c=nil, @Product_Type__c="Research Trip", @MarkupAmount__c=nil, @Product_Type_Id__c=36.0>]

    puts data
=> #<Product_Type__c:0x00000001c356f8>

    puts data.to_json
=> ["#<Product_Type__c:0x00000001c356f8>"]

これらの結果を RESTful サービスで使用するために JSON オブジェクトに具体化するにはどうすればよいですか?

4

1 に答える 1

0

その宝石はわかりませんが、出力を見て、結果をちらりと見ると、Product_Typeオブジェクトが返されたようです。

pまたはputsを使用inspectすると、HTML エンコーディングを使用して、インスタンスが Web ページで表示可能なものに変換されます。そのため、出力に<andが表示>されます。

代わりに、オブジェクトの値にアクセスする必要があります。docsによると、標準のゲッターを使用するか、hash[key]フォームを使用してそれを行うことができます:

contact = Contact.find("contact_id") #=> #
contact = Contact.find_by_Name("John Smith") #=> ダイナミック ファインダー!
contact = Contact.all #=> Databasedotcom::Contact インスタンスのコレクション
contacts = Contact.find_all_by_Company("IBM") #=> Databasedotcom::一致する連絡先のコレクション
contact.Name #=> 連絡先の Name 属性
contact["Name"] #=> 同じこと
contact.Name = "new name" #=> メモリ内の連絡先の Name 属性を変更します
contact["名前"] = "新しい名前" #=> 同じこと
contact.save #=> 変更をデータベースに保存します
contact.update_attributes "名前" => "新しい名前",
  "Phone" => "4156543210" #=> 複数の属性を一度に変更して保存する
contact.delete #=> データベースから連絡先を削除

試してみるdata['Product_Type_Id']と、 が得られるはずです36.0。同じことを行う別の方法は、data.Product_Type_Id.

アクセサーを把握したら、単純なハッシュまたはハッシュの配列を使用して JSON を生成できます。これにより、ハッシュが生成されます。

require 'json'

hash = {
    'Id'               => data.Id,
    'OwnerId'          => data.OwnerId,
    'IsDeleted'        => data.IsDeleted,
    'Name'             => data.Name,
    'CreatedDate'      => data.CreatedDate,
    'CreatedById'      => data.CreatedById,
    'LastModifiedDate' => data.LastModifiedDate,
    'LastModifiedById' => data.LastModifiedById,
    'SystemModstamp'   => data.SystemModstamp,
    'MarkupPercent'    => data.MarkupPercent,
    'Subscription'     => data.Subscription,
    'Product_Type'     => data.Product_Type,
    'MarkupAmount'     => data.MarkupAmount,
    'Product_Type_Id'  => data.Product_Type_Id,
  }

puts hash.to_json

ショートカットとなるto_horメソッドは見当たりませんでした。to_hash

于 2012-12-10T15:31:45.953 に答える