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])