找不到用于销毁链接的Rails参数

时间:2014-01-11 18:03:46

标签: ruby-on-rails ruby-on-rails-4

我收到错误:“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

为什么这不起作用?

2 个答案:

答案 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