gpt4 book ai didi

ruby-on-rails - 尝试使用初始化调用将文档推送到 Mongoid 'embeds_many' 集合时出现 Ruby 错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:30 24 4
gpt4 key购买 nike

我有一个 Submittable 类,其中嵌入了很多提交。我有一个 rspec 测试,我想在其中将新的提交推送到 Submittable.submissions 集合。如果我使用哈希初始化提交,它会工作,但如果我使用初始化调用,它会失败告诉我

NoMethodError: undefined method []' for nil:NilClass
./spec/models/submittable_spec.rb:14:in
block (4 levels) in '

可提交

class Submittable
include Mongoid::Document

belongs_to :course_booking
embeds_many :submissions

field :week, type: Integer
field :topic_name, type: String
field :date_due, type: Date
field :date_submitted, type: Date

end

提交

class Submission
include Mongoid::Document

embedded_in :submittable

field :date_submitted, type: Date
field :normal_mistakes, type: Integer
field :challenge_questions_attempted, type: Integer
field :challenge_questions_mistakes, type: Integer

def initialize(date_submitted, normal_mistakes)
@date_submitted = date_submitted
@normal_mistakes = normal_mistakes
end

end

可提交规范

require 'spec_helper'

describe Submittable do

context "submittable with submissions" do
before {
@submittable = Submittable.new
}
describe "one complete submission" do
before {
#WORKS (if Submission#initialise is removed)
#@submittable.submissions << Submission.new(date_submitted: Date.today, normal_mistakes: 0)
#DOES NOT WORK
@submittable.submissions << Submission.new(Date.today, 0)
}
it "should be complete" do
expect(@submittable.complete?).to eq(true)
end
end

我是 ruby​​ 的新手,所以这可能是很明显的事情,但为什么使用哈希初始化的行为与使用初始化方法的行为不同?

我正在使用 mongoid (3.1.5)、ruby 2.0.0 和 rails (3.2.13)

干杯

最佳答案

Mongoid::Document#intialize 需要一些参数 ( rdoc ):

initialize(attrs = nil, options = nil)

您的实现覆盖了它,这导致了 Mongoid 的一些困惑。如果您想覆盖 initialize,您需要接受这些参数并调用 super。我建议避免使用它——这是您为拥有如此低调的 API 而付出的代价之一。

最好的解决方案是不理会 initialize 并使用您的第一种方法 - Submission.new(date_submitted: Date.today, normal_mistakes: 0)

关于ruby-on-rails - 尝试使用初始化调用将文档推送到 Mongoid 'embeds_many' 集合时出现 Ruby 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com