我在Rails中有一个表单,如下:
= form_for cart, as: :cart, url: backoffice_cart_path(cart) , method: :put, html: { autocomplete: "off", class: 'cart-quoter' } do |f|
呈现时会显示以下标题
<form action="/backoffice/carts/4" ...>
当我更新视图中的某些内容时,我会返回到同一个地方,但是,如果我再次尝试执行相同的操作,则会抛出此错误
没有路线匹配[POST]“/ backoffice / carts / 3”
与之前使用的地址完全相同。
关于它可能是什么的任何想法?
注意:
购物车对象从一开始就存在,所以我可以第一次有效地更新对象,但是第二次路由器找不到指定的路径时再次发送它。
一开始,form_for代码就像这样:
= form_for ['backoffice', cart], html: { autocomplete: "off", class: 'cart-quoter' } do |f|
我刚刚添加了更多显式代码,试图强制提交表单。
路线存在,但只是为了确定
backoffice_cart GET /backoffice/carts/:id(.:format) backoffice/carts#show
PATCH /backoffice/carts/:id(.:format) backoffice/carts#update
PUT /backoffice/carts/:id(.:format) backoffice/carts#update
DELETE /backoffice/carts/:id(.:format) backoffice/carts#destroy
控制器有一个update
方法,没有魔法。
答案 0 :(得分:0)
替换它:
= form_for cart, as: :cart, url: backoffice_cart_path(cart) , method: :put, html: { autocomplete: "off", class: 'cart-quoter' } do |f|
通过
= form_for cart, as: :cart, url: backoffice_cart_path(cart) , html: { autocomplete: "off", class: 'cart-quoter' } do |f|
答案 1 :(得分:0)
表单对象/记录将自己拥有信息,无论是新记录还是现有记录。您可以致电:
进行检查POST
如果返回true,则表示此表单将根据REST资源规则执行/create
PATCH
。如果它返回false,那么它将执行/update
到url
(标准现在是PATCH而不是PUT)
理想情况下,REST资源/记录的表单标记中不应包含method
或as
个参数。这里甚至不需要cart
,因为如果Cart
是名为cart
的类的实例,则Rails将确保所有内容都被视为= form_for cart do |f|
... form stuff ...
,参数明智。
最后,您的代码如下所示:
backoffice
我知道你在这里使用名称空间= form_for [:backoffice, cart] do |f|
.... form stuff ....
,所以你可以通过以下方式实现它:
create
希望这可以解决您的问题。确保购物车来自源,它始终是ActiveRecord模型。当然,您的控制器需要update
和DELETE my_index
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer",
"filter": ["lowercase"]
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 25,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"product": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
},
"search": {
"type": "text",
"search_analyzer": "standard",
"analyzer": "my_analyzer"
}
}
}
}
}
}
}
PUT my_index/product/1
{
"name" : "Kit Guirlande Guinguette 50m Transparent",
"field2": "foo"
}
PUT my_index/product/2
{
"name": "Guirlande Guinguette Blanc 20 Bulbes 10M",
"field2": "foo"
}
GET my_index/product/_search
{
"query": {
"multi_match": {
"query": "Guirlande Gui",
"fields": [
"name.search",
"field2"
],
"minimum_should_match": "100%"
}
},
"highlight": {
"fields": {
"name.search": {
"highlight_query": {
"match": {
"name.search": {
"query": "Guirlande Gui"
}
}
}
}
},
"type" : "unified"
}
}
方法。
答案 2 :(得分:0)
问题的答案尽可能奇怪。
表单里面有一些手动输入,比如这个
A::evaluate
其中一个就是这样写的
b
有一些缺少括号。我修复了这个差异,控制器工作正常。
我不完全理解为什么这是我的问题的解决方案,但是在遇到这种问题时你应该考虑这个问题。看起来像一个充满了一些错误的表单给路由器带来了麻烦,后来又成了轨道中的控制器。