为什么我不能在这个has_one关系上调用create?

时间:2013-12-20 18:18:52

标签: ruby-on-rails

我遗漏了一些基本的东西。这是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)

3 个答案:

答案 0 :(得分:4)

也许您正在寻找这种方法:

user.create_subscription(plan_id: plan.id)

From the RoR guide

  

初始化新的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)