【发布时间】:2016-05-04 18:10:00
【问题描述】:
我是 Rails 新手,也是 Stackoverflow 新手,所以请多多包涵。我确信在我当前的查询之外还有一些事情没有正确完成。
我有一个包含问题和提交的矩阵的应用程序,并且提交有嵌套的答案(对矩阵中的问题)。
我有一个供用户提交的表单,该表单显示特定矩阵的所有相关问题并允许用户回答这些问题。这一切都会正确呈现并保存在数据库的提交/答案表中。
但是,当我编辑提交时,它会使用先前输入的数据正确地预填充字段,以便该部分正常工作,但是当我保存它时,它只是复制了所有内容。
我确信我在我的关系声明中犯了一些错误,因为提交的每个问题应该只允许一个答案,但我已经转了几个小时,很可能找错地方了。
你可以在这里看到效果:http://digital-maturity-matrix.herokuapp.com/matrices/1/submissions/2
我的模特:
class Submission < ActiveRecord::Base
belongs_to :matrix
belongs_to :user
has_many :answers, :dependent => :destroy
accepts_nested_attributes_for :answers,
:allow_destroy => true
end
我的控制器:
def edit
@matrix = Matrix.find(params[:matrix_id])
@submission = Submission.find(params[:id])
@answers = @submission.answers
@questions = @matrix.questions
end
def update
@matrix = Matrix.find(params[:matrix_id])
@user_id = current_user
respond_to do |format|
if @submission.update(submission_params)
format.html { redirect_to matrix_submission_path(@matrix,@submission), notice: 'Submission was successfully updated.' }
format.json { render :show, status: :ok, location: @submission }
else
format.html { render :edit }
format.json { render json: @submission.errors, status: :unprocessable_entity }
end
end
end
...
def submission_params
params.require(:submission).permit(:matrix_id, :user_id, :name, :answers_attributes => [:question_answered, :choice, :question_id])
end
我的表格:
= form_for([@matrix,@submission]) do |f|
- if @submission.errors.any?
#error_explanation
%h2
= pluralize(@submission.errors.count, "error")
prohibited this submission from being saved:
%ul
- @submission.errors.full_messages.each do |message|
%li= message
%br/
.field
= f.hidden_field :matrix_id, :value => params[:matrix_id]
.field
= f.hidden_field :user_id, :value => current_user.id
= f.fields_for :answers, @answers do |answer|
.field
=answer.label answer.object.question_answered
= answer.text_field :choice
.field
= answer.hidden_field :question_answered
.field
= answer.hidden_field :question_id
.actions
= f.submit
【问题讨论】:
标签: ruby-on-rails forms nested