嗨我运行spec文件时遇到此问题。 这是修理模型:
class Reparator < User
include Mongoid::Document
include Mongoid::Timestamps
field :private_reparator, :type => Boolean, :default => true
field :brand_name, :type => String
field :year_of_experience, :type => Integer, :default => 1
has_many :reparations
has_many :skills
validates_presence_of :skills, :year_of_experience
validates :year_of_experience, :numericality => {:greater_than_or_equal_to => 0}
end
这是技能模型:
class Skill
include Mongoid::Document
field :name, :type => String
belongs_to :reparator
validates_presence_of :name
validates_uniqueness_of :name
end
这是控制器:
class ReparatorsController < ApplicationController
respond_to :json
def index
@reparators = Reparator.all
respond_with @reparators
end
def show
@reparator = Reparator.find(params[:id])
respond_with @reparator
end
def create
@reparator = Reparator.new(params[:reparator])
@reparator.skills = params[:skills]
if @reparator.save
respond_with @reparator
else
respond_with @reparator.errors
end
end
def update
@reparator = Reparator.find(params[:id])
if @reparator.update_attributes(params[:reparator])
respond_with @reparator
else
respond_with @reparator.errors
end
end
def destroy
@reparator = Reparator.find(params[:id])
@reparator.destroy
respond_with "Correctly destroyed"
end
end
这是这个控制器的spec文件(我只是把测试没有通过):
it "Should create an reparator" do
valid_skills = [FactoryGirl.create(:skill).id, FactoryGirl.create(:skill).id]
valid_attributes = {:name => "Vianello",
:email => "maremma@gmail.com",
:address => "viale ciccio",
:private_reparator => true
}
post :create, :reparator => valid_attributes, :skills => valid_skills
assigns(:reparator).should be_a Reparator
assigns(:reparator).should be_persisted
end
这就是工厂女孩的技能:
FactoryGirl.define do
factory :skill do
sequence(:name) {|n| "skill#{n}"}
end
end
答案 0 :(得分:0)
我认为您的规范中存在拼写错误。 post :create, :reparator => valid_attributes, :skills => skills_ttributes
应该是post :create, :reparator => valid_attributes, :skills => skills_attributes
。
答案 1 :(得分:0)
坏线就是这个
@reparator.skills = params[:skills]
params[:skills]
是一个字符串数组(已传递的ID),但skills=
方法需要给出Skill
的实际实例,因此会爆炸。
除了skills=
之外,mongoid还为您提供了一个skill_ids=
方法,该方法允许您通过分配一组ID来更改关联的对象。或者,将自己的技能对象加载到@reparator.skills = skills