Rails执行CRUD操作返回302状态码,跳转show页而非index页问题
问题产生原因
你在redirect_to中错误地给命名路由助手candidates_path加了单引号,导致Rails没有调用该路由方法生成正确的/candidates路径,而是将candidates_path当做了相对路径字符串处理。
结合你的路由规则,GET /candidates/:id对应show动作,当请求路径为/candidates/candidates_path时,Rails会将路径段candidates_path识别为:id参数,匹配到show动作,所以最终跳转至show页面而非index页面。
修复方案
把控制器中create、update、destroy方法里的redirect_to 'candidates_path'改为redirect_to candidates_path(去掉外层单引号)即可:
# 修正后的示例(以create方法为例) def create @candidate = Candidate.new(filtered) if @candidate.save flash[:notice] = "Successfully Added!" redirect_to candidates_path # 去掉引号,直接调用路由方法 else render :new end end
其余update、destroy方法中的对应语句做相同修改即可。
额外说明
如果要直接使用字符串路径跳转,需要写以/开头的绝对路径:redirect_to '/candidates',但更推荐使用Rails提供的命名路由助手方法,无需硬编码路径,后续调整路由规则时不需要逐一修改业务代码。
内容的提问来源于stack exchange,提问作者Derek Yi
相关产品推荐
相关产品推荐

