我收到错误:“SitesController#destroy中的ActionController :: ParameterMissing”
它说:“未找到参数:网站”
显示视图:
<%= link_to 'Destroy', @site, method: :delete, data: { confirm: 'Are you sure?' } %>
控制器销毁行动
def destroy
@site = Site.find(site_params)
if @site.present?
@site.destroy
end
redirect_to "sites#index"
end
private
def site_params
params.require(:site).permit(:user_id, :domain)
end
路线
sites GET /sites(.:format) sites#index
POST /sites(.:format) sites#create
new_site GET /sites/new(.:format) sites#new
edit_site GET /sites/:id/edit(.:format) sites#edit
site GET /sites/:id(.:format) sites#show
PATCH /sites/:id(.:format) sites#update
PUT /sites/:id(.:format) sites#update
DELETE /sites/:id(.:format) sites#destroy
为什么这不起作用?
答案 0 :(得分:0)
在这种情况下,您没有正确使用强参数。在这种情况下传递的参数只是id
。因此,您的代码应该只是:
def destroy
@site = Site.find(params[:id])
if @site.present?
@site.destroy
end
redirect_to "sites#index"
end
答案 1 :(得分:0)
从rake任务中可以看出,destroy的路由定义为
DELETE /sites/:id(.:format) sites#destroy
由于预计链接不会发布任何数据,因此您可以访问的唯一参数值是网站ID
params[:id]
您需要将方法更改为
@site = Site.find(params[:id])
而不是
@site = Site.find(site_params)
此外,您可以应用一些其他更改
if @site.present?
@site.destroy
end
这项检查毫无意义。如果find返回结果,则表示记录在那里。
redirect_to "sites#index"
这是一个可怕的重定向命令(假设它有效)。改为使用指定的路线。
将所有更改放在一起最终结果是
def destroy
@site = Site.find(params[:id])
@site.destroy
redirect_to sites_url
end