我遗漏了一些基本的东西。这是Rails 3.2.16。
在我的应用中:
User has_one Subscription
Subscription belongs_to User
Subscription belongs_to Plan
但是当我尝试这样做时:
user.subscription.create(plan_id: plan.id)
我得到以下内容:
NoMethodError: private method `create' called for #<Subscription:0x007f80f1f4dfc0>
然而这很好用:
Subscription.create(user_id: user.id, plan_id: plan.id)
答案 0 :(得分:4)
也许您正在寻找这种方法:
user.create_subscription(plan_id: plan.id)
初始化新的has_one或belongs_to关联时,必须使用build_前缀来构建关联,而不是将用于has_many或has_and_belongs_to_many关联的association.build方法。要创建一个,请使用create_前缀。
答案 1 :(得分:2)
在你的模特中你应该有这样的联想:
class Subscription < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :subscription
end
阅读here
答案 2 :(得分:2)
一种方法
user.subscription = Subscription.create(plan_id: plan.id)