我有一个场景:
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
答案 0 :(得分:0)
我通过将路线改回原来的方式来解决这个问题,现在文章展示的动作包括了网址中的杂志。
我明白这会打破&#34;不超过2级&#34;路由规则,但这是我能让它工作的唯一方法。