Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么这个has\u many的构建关联不适用于Rails 3.2.8?_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 为什么这个has\u many的构建关联不适用于Rails 3.2.8?

Ruby on rails 为什么这个has\u many的构建关联不适用于Rails 3.2.8?,ruby-on-rails,ruby,activerecord,ruby-on-rails-3.2,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 3.2,我有两种型号,如下所示: class StripePlan < ActiveRecord::Base attr_accessible :location, :name, :price, :plan_type has_many :stripe_subscriptions, :foreign_key=>:plan_id end class StripeSubscription < ActiveRecord::Base attr_accessible :email, :

我有两种型号,如下所示:

class StripePlan < ActiveRecord::Base
  attr_accessible :location, :name, :price, :plan_type
  has_many :stripe_subscriptions, :foreign_key=>:plan_id
end

class StripeSubscription < ActiveRecord::Base
  attr_accessible :email, :plan_id, :stripe_customer_token, :teacher_id
  belongs_to :stripe_plan
  belongs_to :teacher
end

class Teacher < ActiveRecord::Base
   has_one :stripe_subscription, dependent: :destroy
end
其中params={:teacher\u id=>1,:plan\u id=>1,:email=“example@example.com"}. 在这里,您可以假设存在id为1的计划以及教师


现在,@stripe\u subscription.stripe\u plan.nil?计算结果为true。但不应为true。因为如果我有一个名为“Subscription”的模型和一个名为“Plan”的模型具有相同的设置,那么@Subscription.Plan.nil?计算结果为false。这是令人费解的,我花了几个小时试图弄明白。我是否发现了一个bug或者我做错了什么?可能部分问题是:外键是:plan\u id而不是:stripe\u plan\u id?在设置has\u many中的:foreign\u key属性之前,我遇到了另一个bug

您不需要在
build
中使用
:plan\u id=>参数[:plan\u id]
,因为这将使用
stripe\u plan
id

你应该做的另一件事是看看科索尔。您可能遗漏了一些未列入白名单的属性


查看,您似乎遇到了类似的问题。

您必须执行
@stripe\u计划。保存
以将项目保存到数据库。它仍在记忆中。如果您执行了
@stripe\u计划。stripe\u订阅
,您仍将看到它,因为它已保存到对象
@stripe\u计划
。在保存
@string\u plan
之前,它不会在数据库中

您也可以这样做
@stripe\u subscription=@stripe\u plan.stripe\u subscriptions.create(:teacher\u id=>params[:teacher\u id],:plan\u id=>params[:plan\u id],:email=>params[:email])


它将创建项目并保存到数据库

谢谢你没有使用:plan_id in build;在我的控制台上,将从生成中创建一个StripeSubscription。没有质量分配错误。只是我似乎无法通过协会遍历@stripe_subscription.stripe_计划…我有相同的has_many/behing_设置,与其他两个模型一起工作,唯一不同的似乎是模型名称…这就是为什么这让我感到困惑和有点疯狂:)
 @stripe_plan = StripePlan.find(params[:plan_id])
 @stripe_subscription = @stripe_plan.stripe_subscriptions.build(:teacher_id=>params[:teacher_id],:plan_id=>params[:plan_id],:email=>params[:email])