来自子控制器的response_to

时间:2019-01-03 15:14:59

标签: ruby-on-rails ruby export-to-csv export-to-excel respond-to

我目前正在修改一个开源Rails项目,在完成了许多教程和建议后,我想在该项目中进行一些导出,但我不断收到UnknownFormat错误,然后我意识到在所有项目控制器的父控制器中,“ application_controller.rb “有一个默认的response_to,如下所示:

rescue_from CanCan::AccessDenied do |exception|
    respond_to do |format|
        format.html { redirect_to main_app.root_url, alert: exception.message }
        format.json { render json: {error: exception.message}, status: :forbidden }
    end
end

那我决定把它变成这个

rescue_from CanCan::AccessDenied do |exception|
    respond_to do |format|
        format.html { redirect_to main_app.root_url, alert: exception.message }
        format.json { render json: {error: exception.message}, status: :forbidden }
       format.csv
       format.xls
    end
end

unknownformat错误停止了,但是随后我无法控制子控制器中的代码,它似乎忽略了我的自定义格式方法的代码,并且直截了当地尝试寻找csv模板并将其呈现,子控制器具有这个:

respond_to do |format|
    format.html
    format.csv { send_data @users.to_csv }
    format.xls
end
我不是很精通Rails,我的意思是这是我的第一个项目,我从修改一个现有项目开始,所以我不知道该如何告诉te applicaation_controller识别csv和xls格式,但前提是孩子控制器响应该格式。

1 个答案:

答案 0 :(得分:0)

我会调查为什么CanCan会拒绝访问。我最初的猜测是,当用户被拒绝时,您不想提供CSV。该方法是为了防止未经授权的访问,因此一旦建立访问权限,便可以将控制器设置为按所需的.csv路由。