我有一个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