评论路线在Rails 5.1中

时间:2018-06-07 21:37:46

标签: ruby-on-rails-5

我正在尝试在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;?在此先感谢。

1 个答案:

答案 0 :(得分:0)

路由器中生成的路由如下所示:

/articles/:article_id/comments/:id

这意味着,当你需要在CommentsController中加载你的文章时,你应该做这样的事情(正如@Marlin所建议的那样):

def set_article
  @article = Article.find(params[:article_id])
end

否则,如果注释和文章表中的ID之间发生ID冲突,则存在将注释附加到不正确文章的风险。或者您只是收到ActiveRecord::RecordNotFound错误。

但是我知道,这不能直接回答你的问题,我怀疑问题是你因为上面提到的而在某处从db加载了错误的记录。

尝试更新代码并编写测试,以确保您可以以编程方式重现错误:)