gpt4 book ai didi

ruby-on-rails - 在每个循环中创建动态 form_tag

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

我有一个名为 assignment 的模型,它有很多 :questions 模型,而这些模型又属于 assignment。问题有一个名为内容的字符串字段。在我的作业的 show.html.erb 中,我有一个循环遍历每个问题并显示它。

<b>questions:</b>
<% @i=1 %>
<% @assignment.questions.each do |q| %>
<p>question <%= @i %><p/>
<%= q.content %>
<%=#need to generate text_area forms here %>
<% @i= @i+1%>
<br/>
<% end%>

用户(一个学生模型有_many: answersheets 模型,又属于 :student)需要填写答案然后点击提交。提交需要创建一个新的答题表对象(其中包含列 student_id assignment_id 和 answer_responses 作为字符串)。我需要将所有答案作为字符串获取,将它们连接起来(中间有一个分隔符,例如“;”),并且需要将新创建的答题表模型的 answer_responses 设置为该字符串。

最佳答案

好吧,这个问题有点开放,但是这里...

首先,您可能只需要一种形式即可实现此目标。它可以包含许多字段,但最好将您想要的所有内容都放在一个表单中(否则您将需要求助于一些 javascript 恶作剧来将数据放在一起)。

现在我们的 View 开始看起来像这样:

<b>questions:</b>
<%= form_tag do %>
<% @i=1 %>
<% @assignment.questions.each do |q| %>
<p>question <%= @i %><p/>
<%= q.content %>
<%=#need to generate text_area fields here %>
<% @i= @i+1%>
<br/>
<% end %>
<% end %>

但等等 - @i范围过大,可能只是 i ,以及所有这些递增的 @i看起来不是很 ruby ...我们可以将其切换为使用 each_with_index稍微清理一下的方法...

<%= form_for :answersheet do |f| %>
<b>questions:</b>
<% @assignment.questions.each_with_index do |question, index| %>
<p>question <%= index %><p/>
<%= question.content %>
<%=#need to generate text_area fields here %>
<br/>
<% end %>
<% end %>

嗯,这样好多了,但现在很明显,循环内部的问题可以很容易地抽象成它自己的部分(可能是 _question.html.erb):

<p>question <%= question_counter %><p/> 
<%= question.content %>
<%=#need to generate text_area fields here %>
<br/>

留给我们:

<%= form_for :answersheet do |f| %>
<b>questions:</b>
<%= render @assignment.questions %>
<% end %>

好的,很好,但是<%=#need to generate text_area fields here %>呢? ?在你的部分中这样的东西应该可以解决问题:

<p>question <%= question_counter %><p/> 
<%= question.content %>
<%= content_tag :textarea , '' , name: raw( "answers[#{ question_counter }]" ) %>
<br/>

这将允许您在 Controller 中执行类似的操作:

Answersheet.create( answer_responses: params[:answers].values.join(';') ) if params[:answers]

目前,这将发布到与最初呈现页面相同的 Controller /操作。您可能希望添加一个额外的路由以将其发送到它自己的 Controller /操作 - 您可以将该路由作为参数提供给 form_tag .此外,这没有考虑可能输入无效数据的可能性,在向用户显示错误消息时需要保留这些数据。它也不考虑重定向用户,或在成功提交后显示成功消息。如果您需要更复杂的功能,您可以考虑切换到 form_for并使用答案表的实际实例,以及更适当的休息路线。在这个例子中,我故意没有使用 form_for,因为发送的数据不能直接被模型使用。您可以考虑制作 answers答题卡上的一种方法被修改为 answer_responses在保存之前,或者其他什么,如果追求那条路线(或者可能在提交时使用 javascript 来做,这感觉不是一个好主意)。就像我说的,有点开放。无论如何,这应该足以让您指明正确的方向 - 祝您好运!

关于ruby-on-rails - 在每个循环中创建动态 form_tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654835/

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