Rails控制器参数名为' application' in hash

时间:2017-01-30 00:03:31

标签: ruby-on-rails ruby heroku controller

我有一个Rails控制器,我使用白名参数来创建新项目:

def course_discussion_comment_params
  params.require(:course_discussion_comment).permit!
end

大部分时间这都正常工作,日志显示params hash为

Parameters: {"body"=>"xxx", "course_id"=>"xxx", "course_discussion_id"=>"xxx", "course_discussion_comment"=>{"body"=>"xxx"}}

然而,偶尔params散列似乎没有被Rails正确解析,并且请求失败,使用application而不是course_discussion_comment记录params散列,如下所示:

Parameters: {"body"=>"xxx", "course_id"=>"xxx", "course_discussion_id"=>"xxx", "application"=>{"body"=>"xxx"}}
...
ActionController::ParameterMissing (param is missing or the value is empty: course_discussion_comment):

我似乎找不到任何导致它的东西,问题是间歇性的,也发生在其他控制器上,但它是一致的,因为它发生了多次,特别是这个控制器似乎是影响最坏的情况,每隔几天发生一次,只有在服务器重新启动时才解决(它在Heroku上,所以dyno每天重启)。

有关可能发生的事情的任何想法?这是完整的控制器:

class CourseDiscussionCommentsController < ApplicationController
  before_action :load_course
  before_action :load_course_discussion
  before_action :set_course_discussion_comment, only: [:update, :destroy]

  before_action {
    in_course(params[:course_id])
  }

  before_action only: [:update, :destroy] {
    current_user(@course_discussion_comment[:from][:_id])
  }

  def create

    course_discussion_comment_params[:from] = {
        _id: @authenticatedUser[:id],
        firstName: @authenticatedUser[:firstName],
        lastName: @authenticatedUser[:lastName],
    }
    course_discussion_comment_params[:deleted] = false
    @course_discussion_comment = @course_discussion.course_topic_comments.build(course_discussion_comment_params)

    if @course_discussion_comment.save
      DiscussionActionMailer.comment_added(request.base_url, @course, @authenticatedUser, @course_discussion, @course_discussion_comment).deliver_now

      render json: @course_discussion_comment, status: 200
    else
      render json: @course_discussion_comment.errors, status: 422
    end
  end

  def update
    if @course_discussion_comment.update(course_discussion_comment_params)
      render json: @course_discussion_comment, status: 200
    else
      render json: @course_discussion_comment.errors, status: 422
    end
  end

  def destroy
    params = {
        :deleted => true
    }

    if @course_discussion_comment.update(params)
      render json: @course_discussion_comment, status: 200
    else
      render json: @course_discussion_comment.errors, status: 422
    end
  end

  private
  def course_discussion_comment_params
    params.require(:course_discussion_comment).permit!
  end

  def load_course
    @course = Course.find(params[:course_id])
  end

  def load_course_discussion
    @course_discussion = @course.course_topics.find(params[:course_discussion_id])
  end

  def set_course_discussion_comment
    @course_discussion_comment = @course_discussion.course_topic_comments.find(params[:id])
  end
end

0 个答案:

没有答案