我有一个纸质模型,有很多问题。我正在制作api。
在paper.rb
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions, reject_if: :all_blank,allow_destroy: true
问题.rb
belongs_to :paper
在paper_controller.rb
中 def create
paper = current_user.papers.create(paper_params)
unless plan.blank?
render json: {status: 'successful', paper: paper }, status: 201
else
render json: {error: 'Some thing went wrong'}, status: 401
end
end
def update
paper = Paper.find(params[:id])
if paper.update_attributes(paper_params)
render json: {status: 'successful', paper: paper }, status: 201
else
render json: {error: 'Some thing went wrong'}, status: 401
end
end
private
def paper_params
params.require(:paper).permit(:subject,questions_attributes: [:id, :question])
end
我的问题是每当我在特定论文中编辑问题时,问题都没有被编辑,但是形成了新的问题。例如,如果有3个问题并且我已发送编辑请求,则该论文将有6个问题。
答案 0 :(得分:0)
<强>更新强> 对于JSON,有一个known issue。更多信息here。
如果正在形成新问题,则意味着您的控制器无法找到现有的子问题。唯一可能发生的方法是,如果您没有为每个问题发送:id,那么问题不是您的控制器或模型,而是表单从客户端发送的内容。
如果您的表单使用javascript并提交json正文,您还应检查JSON结构是否有一个名为“questions_attributes”的子项,而不是“question_attributes”。
仅供参考,您不需要实际指定问题:如果您的ID是整数,则在许可证代码中输入ID(尽管您当然必须发送它以使更新生效)。
def paper_params
params.require(:paper).permit(:id, :subject, questions_attributes: [:question])
end
请参阅官方文档示例here。如果您的id不是整数(例如自定义,例如GUIDS,那么您确实需要它)。