rails重定向到操作错误的URL

时间:2015-07-18 23:58:18

标签: ruby-on-rails

我有一个场景:

resources :magazines do
  resources :articles do
    resources :comments
  end
end

为了避免嵌套超过2级,我将其重新考虑为:

resources :magazines do
  resources :articles
end
resources :articles do
  resources :comments
end

我的文章显示的操作网址是: /杂志/ 3 /物品/ 11

在此视图中,我有一个用于创建新评论的表单。

成功保存评论后,表单会重定向一切正常。

当表单提交不成功时,我希望重新显示视图,并显示验证错误。我理解这样做的正确方法是呈现'文章/节目'视图。这也有效,并且显示的验证错误会重新显示视图。

问题是当保存失败并且呈现文章/节目时,URL不再正确并显示为: /物品/ 11 /评论

class ArticlesController < ApplicationController
  def show
    @article  = Article.find(params[:id])
    @comments = @article.comments.order(created_at: :asc).page(params[:page]).per_page(5)
    @comment  = Comment.new
  end
end

class CommentsController < ApplicationController
  def create
    @article = Article.find(params[:id])
    @comment = @article.comments.new(discussion_params)
    @comment.user_id = current_user.id

    if @comment.save
      redirect_to @article
    else
      render 'articles/show'
    end
  end

  private

    def discussion_params
      params.require(:comment).permit(:content)
    end
end

1 个答案:

答案 0 :(得分:0)

我通过将路线改回原来的方式来解决这个问题,现在文章展示的动作包括了网址中的杂志。

我明白这会打破&#34;不超过2级&#34;路由规则,但这是我能让它工作的唯一方法。