ruby-on-rails - 销售人员 REST API : Databasedotcom gem to upload attachments

标签 ruby-on-rails ruby salesforce attachment databasedotcom-gem

我在我的 Ruby on Rails 应用程序中使用 Heroku 的 Databasedotcom gem 与 Salesforce 的 REST API 进行交互。我可以通过 API 成功创建帐户,但添加附件时遇到问题。我找到了这个建议 https://github.com/heroku/databasedotcom/issues/98并做了以下事情:

# Upload to Salesforce attachment
salesforce_attachment = Salesforce.client.materialize("Attachment").new
salesforce_attachment.Body = Base64::encode64(File.read(temp_file_path)) # critical line
salesforce_attachment.OwnerId = Salesforce::Sobjects::OWNER_IDS[:OWNER_ID]
salesforce_attachment.ParentId = Salesforce.find_or_create_account_for_user(user)
salesforce_attachment.Name = file_name
salesforce_attachment.IsPrivate = false
salesforce_attachment.save # this isn't saving for some reason

但是,当我尝试保存时,出现以下错误:

Databasedotcom::SalesForceError: Cannot deserialize instance of reference from START_OBJECT value { at [line:1, column:2]
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/databasedotcom-1.3.2/lib/databasedotcom/client.rb:376:in `ensure_expected_response'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/databasedotcom-1.3.2/lib/databasedotcom/client.rb:334:in `with_encoded_path_and_checked_response'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/databasedotcom-1.3.2/lib/databasedotcom/client.rb:307:in `http_post'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/databasedotcom-1.3.2/lib/databasedotcom/client.rb:234:in `create'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/databasedotcom-1.3.2/lib/databasedotcom/sobject/sobject.rb:115:in `save'
from (irb):100
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.17/lib/rails/commands/console.rb:47:in `start'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.17/lib/rails/commands/console.rb:8:in `start'
from /Users/oregontrail256/.rvm/gems/ruby-1.9.3-p545/gems/railties-3.2.17/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

我尝试了不同的文件,但仍然遇到问题。我强烈怀疑这与设置附件的“正文”属性有关,但我无法弄清楚我做错了什么,因为所有资源,包括 Salesforces' developer docs ,说要 base64 编码文件。此外,我没有超过他们的 5 Mb 限制。有什么建议吗???

最佳答案

好的,我明白了:当我设置附件的 ParentId 时,我使用的是实际的帐户对象,而不是帐户对象的 ID。即:

# wrong
salesforce_attachment.ParentId = Salesforce.find_or_create_account_for_user(user)

# right
salesforce_attachment.ParentId = Salesforce.find_or_create_account_for_user(user).Id

关于ruby-on-rails - 销售人员 REST API : Databasedotcom gem to upload attachments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033305/

相关文章:

ruby-on-rails - Gem::Installer::ExtensionBuildError:错误:无法构建 gem native 扩展。 - 在 Debian 7 上安装 Redmine

ruby - Gmail gem 上的未知命令

python - 1064、 "You have an error in your SQL syntax;..."Python MySQL

ios - 使用 iOS MobileSDK 同步执行 SalesForce SOQL 查询

css - 如何更改顶点 :pageBlock in Salesforce 的边框顶部颜色

ruby-on-rails - 使用多个 bool 值的 Rails 范围验证

ruby-on-rails - 为一个模型设计多个路径

html - 使用 ruby​​ 变量作为 html 代码

ruby - 使用 Faraday Ruby gem 下载图像并写入磁盘

ruby - solr 新添加的索引上的文档在重启前没有反射(reflect)出来