我正在尝试在Rails 5.1中创建用户创建文章的评论。 提交评论后,重定向应该是' / articles /:id'但是改为重定向到' / articles /:id / comments'。
我在routes.rb中使用嵌套路由:
def parse(self, response):
# initialize your prc_path/sqf_path/loc_path here
lookup_map = {"prc": prc_path, "sqf": sqf_path, "loc": loc_path} # add as many as needed
return {k: response.xpath(v).extract_first() for k, v in lookup_map.items() if v}
My CommentsController.rb:
devise_for :users
root to: "articles#index"
resources :articles do
resources :comments
end
文章/ show.html.erb中的评论表单:
class CommentsController < ApplicationController
before_action :set_article
def create
unless current_user
flash[:alert] = "Please sign in or sign up first"
redirect_to new_user_session_path
else
@comment = @article.comments.build(comment_params)
@comment.user = current_user
if @comment.save
flash[:notice] = "Comment has been created"
else
flash.now[:alert] = "Comment not created correctly"
end
redirect_to article_path(@article)
end
end
private
def comment_params
params.require(:comment).permit(:body)
end
def set_article
@article = Article.find(params[:id])
end
end
如何将此提交按钮保存并重定向回&#39; articles /:id&#39;?在此先感谢。
答案 0 :(得分:0)
路由器中生成的路由如下所示:
/articles/:article_id/comments/:id
这意味着,当你需要在CommentsController中加载你的文章时,你应该做这样的事情(正如@Marlin所建议的那样):
def set_article
@article = Article.find(params[:article_id])
end
否则,如果注释和文章表中的ID之间发生ID冲突,则存在将注释附加到不正确文章的风险。或者您只是收到ActiveRecord::RecordNotFound
错误。
但是我知道,这不能直接回答你的问题,我怀疑问题是你因为上面提到的而在某处从db加载了错误的记录。
尝试更新代码并编写测试,以确保您可以以编程方式重现错误:)