【问题标题】:Rails Braintree gem subscription class conflictRails Braintree gem 订阅类冲突
【发布时间】:2011-05-05 16:07:28
【问题描述】:

在我的 Rails 应用程序中,我使用 Braintree gem 创建订阅。不知不觉中,我还创建了一个订阅模型和控制器来管理我想在本地存储的订阅信息。在我的模型中,订阅可以属于用户。但是,您可以做的一些正常事情不起作用,例如 current_user.subscriptions.build()

但由于某种原因,当有人帮助我时,他们能够使用

current_user.create_subscription

这个 create_subscription 方法是在哪里定义的?它是否以某种方式覆盖了 Rails 约定?

我注意到 Braintree gem 中有一个 subscription.rb 文件。 Braintree定义的类和我的订阅模型有冲突吗?我知道我可能可以重命名我的订阅模型,但我很好奇冲突是什么。

【问题讨论】:

    标签: ruby-on-rails subscription braintree


    【解决方案1】:

    您的问题是订阅关系是has_one 或belongs_to,而不是has_many。在这种情况下,用户将没有订阅方法,因为附加的订阅是单数的。查看 API 文档,了解如何在 AR 中操作这些类型的关系。

    来自 has_one 的手册:

    将添加以下用于检索和查询单个关联对象的方法: 关联(force_reload = false) 返回关联的对象。如果没有找到,则返回 nil。 关联=(关联) 分配关联对象,提取主键,将其设置为外键,并保存关联对象。 build_association(属性 = {}) 返回已使用属性实例化并通过外键链接到此对象但尚未保存的关联类型的新对象。注意:这仅在关联已经存在时才有效。如果关联为零,它将不起作用。 创建关联(属性 = {}) 返回已使用属性实例化的关联类型的新对象,通过外键链接到该对象,并且已经保存(如果它通过了验证)。

    Braintree 确实有一个 Subscription 类,但它的命名空间为 Braintree:Subscription,所以这不是问题。

    【讨论】:

    • 啊,我明白了。不知道 has_one 有什么不同。谢谢!
    猜你喜欢
    • 2014-03-04
    • 2019-03-01
    • 2017-04-11
    • 2015-10-25
    • 2011-08-23
    • 2017-01-07
    • 2018-05-07
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多