Rails 序列化存储不正确
Rails serialize not storing correctly
我正在使用 https://github.com/rfunduk/rails-stripe-connect-example 中的示例设置条带连接,运行 使用序列化存储 stripe_account_status
时出现问题,应该将其存储为数组。
这是应该的存储方式(从上面的例子link生成)
{"details_submitted"=>false, "charges_enabled"=>true, "transfers_enabled"=>false, "fields_needed"=>["legal_entity.first_name", "legal_entity.last_name", "legal_entity.dob.day", "legal_entity.dob.month", "legal_entity.dob.year", "legal_entity.address.line1", "legal_entity.address.city", "legal_entity.address.postal_code", "bank_account"], "due_by"=>nil}
这就是我的应用程序存储它的方式
{:details_submitted=>false, :charges_enabled=>true, :transfers_enabled=>false, :fields_needed=>["legal_entity.first_name", "legal_entity.last_name", "legal_entity.dob.day", "legal_entity.dob.month", "legal_entity.dob.year", "legal_entity.address.line1", "legal_entity.address.city", "legal_entity.address.postal_code", "bank_account"], :due_by=>nil}
就我而言,所有设置都是一样的。唯一的区别是第一个示例使用
serialize :stripe_account_status, JSON
我的应用只有
serialize :stripe_account_status
原因是我在添加JSON的时候出现了这个错误:
JSON::ParserError - 795: unexpected token at '':
我尝试找出 JSON 错误,包括将 config/initializers/cookies_serializer.rb 更改为使用 :hybrid 但这给了我同样的错误。
有人能指出我解决 JSON 问题的正确方向 或 找到一种方法来确保 stripe_account_status
存储为排列正确。
下面是存储数组的方法:
if @account
user.update_attributes(
currency: @account.default_currency,
stripe_account_type: 'managed',
stripe_user_id: @account.id,
secret_key: @account.keys.secret,
publishable_key: @account.keys.publishable,
stripe_account_status: account_status
)
end
def account_status
{
details_submitted: account.details_submitted,
charges_enabled: account.charges_enabled,
transfers_enabled: account.transfers_enabled,
fields_needed: account.verification.fields_needed,
due_by: account.verification.due_by
}
end
谢谢,我真的很感激你能给我指出任何方向!
当您要求 Rails 序列化模型上的属性时,它会默认将对象存储为 YAML 字符串。
您可以要求 Rails 进行不同的序列化,正如您通过提供 class 进行序列化所注意到的那样,例如
serialize :stripe_account_status, JSON
添加它时它不起作用的原因是因为您可能已经使用 YAML 在数据库中有了记录,因此 Rails 无法将其解析为有效的 JSON 从数据库读取时的字符串。如果只是不需要的开发数据,可以删除记录,然后使用JSON,否则需要将当前的YAML字符串转换为JSON.
Rails 也将在解析数据库中的序列化字符串时符号化哈希的键。这是您问题中哈希值之间的唯一区别,在实践中应该无关紧要。如果出于某种原因需要 String 键,可以在 Rails.
提供的散列上使用 #stringify_keys
方法
我正在使用 https://github.com/rfunduk/rails-stripe-connect-example 中的示例设置条带连接,运行 使用序列化存储 stripe_account_status
时出现问题,应该将其存储为数组。
这是应该的存储方式(从上面的例子link生成)
{"details_submitted"=>false, "charges_enabled"=>true, "transfers_enabled"=>false, "fields_needed"=>["legal_entity.first_name", "legal_entity.last_name", "legal_entity.dob.day", "legal_entity.dob.month", "legal_entity.dob.year", "legal_entity.address.line1", "legal_entity.address.city", "legal_entity.address.postal_code", "bank_account"], "due_by"=>nil}
这就是我的应用程序存储它的方式
{:details_submitted=>false, :charges_enabled=>true, :transfers_enabled=>false, :fields_needed=>["legal_entity.first_name", "legal_entity.last_name", "legal_entity.dob.day", "legal_entity.dob.month", "legal_entity.dob.year", "legal_entity.address.line1", "legal_entity.address.city", "legal_entity.address.postal_code", "bank_account"], :due_by=>nil}
就我而言,所有设置都是一样的。唯一的区别是第一个示例使用
serialize :stripe_account_status, JSON
我的应用只有
serialize :stripe_account_status
原因是我在添加JSON的时候出现了这个错误:
JSON::ParserError - 795: unexpected token at '':
我尝试找出 JSON 错误,包括将 config/initializers/cookies_serializer.rb 更改为使用 :hybrid 但这给了我同样的错误。
有人能指出我解决 JSON 问题的正确方向 或 找到一种方法来确保 stripe_account_status
存储为排列正确。
下面是存储数组的方法:
if @account
user.update_attributes(
currency: @account.default_currency,
stripe_account_type: 'managed',
stripe_user_id: @account.id,
secret_key: @account.keys.secret,
publishable_key: @account.keys.publishable,
stripe_account_status: account_status
)
end
def account_status
{
details_submitted: account.details_submitted,
charges_enabled: account.charges_enabled,
transfers_enabled: account.transfers_enabled,
fields_needed: account.verification.fields_needed,
due_by: account.verification.due_by
}
end
谢谢,我真的很感激你能给我指出任何方向!
当您要求 Rails 序列化模型上的属性时,它会默认将对象存储为 YAML 字符串。
您可以要求 Rails 进行不同的序列化,正如您通过提供 class 进行序列化所注意到的那样,例如
serialize :stripe_account_status, JSON
添加它时它不起作用的原因是因为您可能已经使用 YAML 在数据库中有了记录,因此 Rails 无法将其解析为有效的 JSON 从数据库读取时的字符串。如果只是不需要的开发数据,可以删除记录,然后使用JSON,否则需要将当前的YAML字符串转换为JSON.
Rails 也将在解析数据库中的序列化字符串时符号化哈希的键。这是您问题中哈希值之间的唯一区别,在实践中应该无关紧要。如果出于某种原因需要 String 键,可以在 Rails.
提供的散列上使用#stringify_keys
方法