Rails & simple_form // 没有路由匹配 [PATCH] "/spots.10"
Rails & simple_form // No route matches [PATCH] "/spots.10"
当我尝试更新模型时出现错误。 spot
No route matches [PATCH] "/spots.7"
我用Rails6,bootstrap和gemsimple_form
我已经手动创建了 config/routes.rb
并且表格与 new.html.erb
和 edit.html.erb
相同
路线
index GET /spots(.:format) spots#index
new GET /spots/new(.:format) spots#new
spots POST /spots(.:format) spots#create
edit GET /spots/show/:id/edit(.:format) spots#edit
update PATCH /spots/:id(.:format) spots#update
show GET /spots/show/:id(.:format) spots#show
delete DELETE /spots/:id(.:format) spots#destroy
控制器
class SpotsController < ApplicationController
before_action :set_spot, only: [:show, :destroy, :edit, :update]
def index
@spots = Spot.all
end
def show
end
def new
@spot = Spot.new
end
def create
@spot = Spot.new(spot_params)
@spot.save
redirect_to index_path
end
def edit
end
def update
@spot.update(spot_params)
redirect_to index_path
end
def destroy
@spot.destroy
redirect_to index_path
end
private
def spot_params
params.require(:spot).permit(:name, etc...)
end
def set_spot
@spot = Spot.find(params[:id])
end
end
查看 - edit.html.erb
<div class="container">
<h1>FORM</h1>
<%= render "form", spot: @spot %>
</div>
部分_form
#HERE, i think, it come from this underline, the url passed as argument is bad
<%= simple_form_for (spot), url:(spot.new_record? ? spots_path : spots_path(spot)) do |f| %>
<%= f.input :name %>
.
.
.
<%= f.submit %>
<% end %>
我试过很多东西。
Path helpers generate paths with dots instead of slashes
Rails creating malformed routes with dots
单数化spot_path(spot)
也给我报错
我想,我很接近,但我看不到我的错误!
非常感谢
你的错误在于你的路径助手:
spots_path
正在生成通往 spots#index
的路线,因此 "/spots"
。如果你像这样给它一个参数: spots_path(spot)
所有路径助手方法可以做的就是将它附加到路径,因此它生成 "/spots.10"
.
如果您要在 Rails 中生成 7 个 CRUD(创建、读取、更新、销毁)路由,您应该在 routes.rb
中使用 resources :spots
而不是手动执行。这也将为路径助手生成正确的前缀,您可以在终端中使用命令 rails routes
时找到它。
最重要的是:您创建的路线并不完全正确,例如 show
只是 spots/:id
(编辑时相同)。但是我猜这行不通(这是因为如果您手动创建路由,则需要在新路由上方定义显示路由,否则它会与新路由混淆)。
至于表单,您不需要手动创建 url,Rails' 表单助手负责生成正确的路由,具体取决于记录是否是新的,所以<%= simple_form_for (spot) do |f| %>
就足够了。
当我尝试更新模型时出现错误。 spot
No route matches [PATCH] "/spots.7"
我用Rails6,bootstrap和gemsimple_form
我已经手动创建了 config/routes.rb
并且表格与 new.html.erb
和 edit.html.erb
路线
index GET /spots(.:format) spots#index
new GET /spots/new(.:format) spots#new
spots POST /spots(.:format) spots#create
edit GET /spots/show/:id/edit(.:format) spots#edit
update PATCH /spots/:id(.:format) spots#update
show GET /spots/show/:id(.:format) spots#show
delete DELETE /spots/:id(.:format) spots#destroy
控制器
class SpotsController < ApplicationController
before_action :set_spot, only: [:show, :destroy, :edit, :update]
def index
@spots = Spot.all
end
def show
end
def new
@spot = Spot.new
end
def create
@spot = Spot.new(spot_params)
@spot.save
redirect_to index_path
end
def edit
end
def update
@spot.update(spot_params)
redirect_to index_path
end
def destroy
@spot.destroy
redirect_to index_path
end
private
def spot_params
params.require(:spot).permit(:name, etc...)
end
def set_spot
@spot = Spot.find(params[:id])
end
end
查看 - edit.html.erb
<div class="container">
<h1>FORM</h1>
<%= render "form", spot: @spot %>
</div>
部分_form
#HERE, i think, it come from this underline, the url passed as argument is bad
<%= simple_form_for (spot), url:(spot.new_record? ? spots_path : spots_path(spot)) do |f| %>
<%= f.input :name %>
.
.
.
<%= f.submit %>
<% end %>
我试过很多东西。
Path helpers generate paths with dots instead of slashes
Rails creating malformed routes with dots
单数化spot_path(spot)
也给我报错
我想,我很接近,但我看不到我的错误!
非常感谢
你的错误在于你的路径助手:
spots_path
正在生成通往 spots#index
的路线,因此 "/spots"
。如果你像这样给它一个参数: spots_path(spot)
所有路径助手方法可以做的就是将它附加到路径,因此它生成 "/spots.10"
.
如果您要在 Rails 中生成 7 个 CRUD(创建、读取、更新、销毁)路由,您应该在 routes.rb
中使用 resources :spots
而不是手动执行。这也将为路径助手生成正确的前缀,您可以在终端中使用命令 rails routes
时找到它。
最重要的是:您创建的路线并不完全正确,例如 show
只是 spots/:id
(编辑时相同)。但是我猜这行不通(这是因为如果您手动创建路由,则需要在新路由上方定义显示路由,否则它会与新路由混淆)。
至于表单,您不需要手动创建 url,Rails' 表单助手负责生成正确的路由,具体取决于记录是否是新的,所以<%= simple_form_for (spot) do |f| %>
就足够了。