gpt4 book ai didi

ruby-on-rails - ruby on rails,无法将 check_box_tag 值传回 update_attributes

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:15 25 4
gpt4 key购买 nike

我有一个相当简单的 Rails 应用程序,可以处理数学测验。用户可以创建带有问题和答案的数学问题。他们还可以创建带有标题的考试。这些模型与 has_many_and_belongs_to 关系相关联,因为每个测验可以有很多问题,并且每个问题可以属于多个测验。这种关系似乎运作良好,因为当我删除问题或考试时,相关的对象列表会更新。我目前的方式是,当您创建考试时,该 View 会为您提供一个复选框列表,一个用于问题数据库中的每个问题。用户单击他们想要在考试中出现的问题的复选框,无论选中哪个框,这些问题都会添加到考试中。我将展示更新的代码,因为这是我一直用来测试的 View 。

这是 View :

  <h2>Available Problems:</h2>
<% Problem.all.each do |prob| %>
<%= f.fields_for "exam[problem_ids][]", prob do |builder| %>
<p>
<%= check_box_tag "exam[problem_ids][]", prob.id, @exam.problems.include?(prob) %>
<%= prob.question %> = <%= prob.answer %> | <%= link_to "Edit", edit_problem_path(prob) %>
</p>
<% end %>
<% end %>

我必须使用 check_box_tag,因为如果我尝试使用 builder.check_box,它不会保存已经选中的框。

我的 Controller :

  def update
@exam = Exam.find(params[:id])

if @exam.update_attributes(params[:exam].permit(:title, :problem_ids))
redirect_to @exam
else
render 'edit'
end
end

在 View 中,我将所有复选框结果保存在 problem_ids 数组中。我知道这个数组被正确填充,因为当我添加以下代码时,它起作用了。

@exam.problems = []
params[:exam][:problem_ids].each {
|prob_id|
@exam.problems << Problem.find(prob_id)
}

显然,这是一种非常 hackey 的方式,因为我每次都手动构建问题列表,但我终究无法弄清楚如何让这些复选框结果自动填充到 update_attributes 方法。有什么想法吗?

更新:根据下面 Donovan 的建议,我在我的考试模型中实现了以下方法:

  def problem_ids=(some_problem_ids)
@exam.problems.clear
some_problem_ids.each {
|prob_id|
@exam.problems << Problem.find(prob_id)
}
end

据我了解,这应该是problem_ids 的“setter”方法。遗憾的是,当我在我的考试 Controller 中使用以下行时,问题列表仍然没有更新:

@exam.update_attributes(params[:exam].permit(:title, :problem_ids))

附言我必须放置 .permit(:title, :problem_ids) 位,否则我会得到一个 ForbiddenAttributesError

最佳答案

@exam.problems 是一个对象列表,但由于这种关系,应该在你的考试中还有一个 problem_ids setter 方法,所以

@exam.update_attributes(params[:exam])

应该做你想做的。如果您出于某种原因需要更新 problem_id,这应该可以解决问题:

@exam.update_attribute(:problem_ids, params[:exam][:problem_ids])

注意:我省略了 rails4 strong_parameters 以使答案对 rails 3 或 4 通用,确保您使用适合您的版本的方法。

关于ruby-on-rails - ruby on rails,无法将 check_box_tag 值传回 update_attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20641851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com