gpt4 book ai didi

ruby-on-rails - Rails,编辑操作不会使用同一模型的许多实例正确填充表单

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:27 25 4
gpt4 key购买 nike

我是 Rails 新手,正在做我的第一个项目。另外,英语不是我的母语,所以请多多包涵。

我遇到的问题是,我有一个包含同一模型的多个实例的表单,数据创建正确,但当我尝试编辑它时,表单以错误的方式填充。

我正在制作一个应用程序来检查是否一切都按照规则进行。要检查的项目在嵌套关联中 Chapters->Subchapters->Checks

每次提交支票时,都会创建一个 CheckRound,并将每张支票的信息单独存储在 CheckResults 中。

CheckRounds

has_many :check_results, inverse_of: :check_round, dependent: :destroy
accepts_nested_attributes_for :check_results, reject_if: proc { |att| att['observation'].blank? }

检查结果

belongs_to :check_round, optional: true, inverse_of: :check_results
belongs_to :check

章节

has_many :subchapters

子章节

belongs_to: chapter
has_many: checks

支票

belongs_to :subchapter
has_many :check_results

该表单显示所有章节以及嵌套的子章节和检查。每个支票都显示其名称并有一个 text_area 作为输入。

用户可以不填写或填写多个支票。

<%= form_for(@check_round, :url => {:action => 'update', :client_id => @client.id, :project_id => @project.id}) do |f| %>
<% @chapters.each do |chapter| %>
<%= chapter.name %>
<% chapter.subchapters.each do |subchapter| %>
<%= subchapter.name %>
<% subchapter.checks.each do |check| %>
<%= f.fields_for :check_results do |result| %>
<%= check.name %>
<%= result.hidden_field(:check_id, :value => check.id) %>
<%= result.text_area(:observation, rows: 4, :id =>'obs' + check.id.to_s) %>
<% end %>
<% end %>
<% end %>
<% end %>
<% end %>

Controller 是

def edit
@check_round = CheckRound.includes(:check_results).find(params[:id])
@chapters = Chapter.includes(subchapters: :checks).where("segment_id = ?", @project.segment_id).sorted
end

例如,如果我在编辑时提交 check.id = 3observation = "bad" 每支票在其观察中都有 "bad"不管它的 id。

我想知道如何在编辑中显示除了已创建的检查以外的所有检查。

提前感谢您的宝贵时间!

最佳答案

好的,据我所知,有 2 件事需要修复。

第一,你的f.fields_for :check_results do |result|需要一个额外的参数来指定它确切必须修改的 check_results ......像这样的东西:

f.fields_for :check_results, @check_round.check_results.where(check_id: check.id) 做|结果|在完全相同的位置,因此 check 变量指定了正确的方式。

2de,您需要在 Controller 中允许嵌套参数,以便在您提交时保存它们。通常,您应该在 check_round Controller 中看到一个名为 check_round_params 的方法。这个必须像这样才能正常工作:

  def check_round_params
params.require(:check_round_params).permit(
/*your needed params*/,
check_results_attributes: [:id, :check_id, :observation, /*all your nested params*/]
)
end

简而言之,您的 updatecreate 操作根据那些允许的参数工作,因此您需要在那里定义它们。 check_results_attributes: 是 Rails 理解这些参数用于嵌套模型的方式。

这里有一些您可能会感兴趣的文档:Nested attributes example

关于ruby-on-rails - Rails,编辑操作不会使用同一模型的许多实例正确填充表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498508/

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