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
对的散列中。希望这有帮助。如果你还有其他问题,请告诉我。谢谢