ruby-on-rails – 如何存根after_create回调保存!在模特?
发布时间:2020-12-17 02:03:09 所属栏目:百科 来源:网络整理
导读:我收到以下错误: 输出: 1) LabelsController#create label is new creates a new label Failure/Error: post :create,attributes[:label],format: :json NoMethodError: undefined method `save!' for nil:NilClass # ./app/models/labeling.rb:17:in `upd
我收到以下错误:
输出: 1) LabelsController#create label is new creates a new label Failure/Error: post :create,attributes[:label],format: :json NoMethodError: undefined method `save!' for nil:NilClass # ./app/models/labeling.rb:17:in `update_target' 在标签模型中: after_create :update_target def update_target self.target.save! end 测试: require 'spec_helper' describe LabelsController do before(:each) do controller.stub(:current_user).and_return(mock_model(User)) stub_request(:any,"www.example.com").to_return(status: 200) end describe "#create" do context "label is new" do it "creates a new label" do attributes = { label: { name: "test",labeling: { target_type: "Link",target_id: 1 } } } response.status.should == 200 post :create,format: :json end end end end 贴标控制器: def create label = Label.find_by_name(params[:name]) labeling = label.labelings.build do |lb| lb.user_id = current_user.id lb.target_type = params[:labeling][:target_type] lb.target_id = params[:labeling][:target_id] end if labeling.save render json: { name: label.name,id: label.id,labeling: { id: labeling.id } } end end 解决方法
从它的外观来看,你没有数据库中ID为1的Target,所以在你引用self.target的地方,返回的值是nil.
我在你的情况下做的是首先创建一个目标,然后将其id传递给属性hash: target = Traget.create! attributes = { label: { name: "test",target_id: target.id } } } 这样你就不需要存根了. Labeling.any_instance.stub(:update_target).and_return(true) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |