Ruby on rails Rspec意外关键字_end,应为';}';
它工作得很好:Ruby on rails Rspec意外关键字_end,应为';}';,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,它工作得很好: post :create, params_with_product 它也是: put :update, id:@item, item: params_with_product 但是它失败了,出现语法错误,意外的关键字\u end,当我执行以下操作时,应为“}”: put :update, :id => @item.id, params_with_product 其中: let(params_with_product) { item: FactoryGirl.attr
post :create, params_with_product
它也是:
put :update, id:@item, item: params_with_product
但是它失败了,出现语法错误,意外的关键字\u end,当我执行以下操作时,应为“}”
:
put :update, :id => @item.id, params_with_product
其中:
let(params_with_product) { item: FactoryGirl.attributes_for(:item_without_product) }
尝试
put:update,{:id=>@item.id}.merge(params_with_product)
只需添加djaszczurowski正确的答案即可
因为您必须将params
散列(key:value
pairs)作为参数发送到请求,其中value
本身可以是散列。因此,post
,put
方法可以将params
散列作为参数
在您的第一个案例中,它起了作用:
post :create, params_with_product
因为params\u with_product
是散列(有效的key:value
pair)
但是,在第二种情况下:
put :update, :id => @item.id, params_with_product
它失败,因为第二个参数没有任何键。
因此,您可以将:id=>@item.id
与参数with_product
合并,它再次返回一个散列(有效的键:值
对),效果很好。@K M Rakibul Islam,稍微更新了我的问题,当id:@item,item:param_with_product
是散列时,为什么这个不会是散列?我不理解那部分。put:update,id:@item,item:params_with_product
起作用,因为两个参数都有key=>value
对。但是,put:update,:id=>@item.id,params_with_product
失败,因为第一个参数有key=>value
对,而第二个参数没有。因此,要么您必须将所有参数作为key:value
对发送,要么您可以将它们合并到一个包含所有key:value
对的散列中。希望这有帮助。如果你还有其他问题,请告诉我。谢谢