Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在each循环中创建动态form_标记_Ruby On Rails_Ruby_Forms_Loops_Model - Fatal编程技术网

Ruby on rails 在each循环中创建动态form_标记

Ruby on rails 在each循环中创建动态form_标记,ruby-on-rails,ruby,forms,loops,model,Ruby On Rails,Ruby,Forms,Loops,Model,我有一个叫做分配的模型,它有很多问题:问题模型,而问题模型又属于分配。问题有一个称为内容的字符串字段。在我的作业的show.html.erb中,我有一个循环,循环遍历每个问题并显示它 <b>questions:</b> <% @i=1 %> <% @assignment.questions.each do |q| %> <p>question <%= @i %><p/> <

我有一个叫做分配的模型,它有很多问题:问题模型,而问题模型又属于分配。问题有一个称为内容的字符串字段。在我的作业的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%>
问题:
问题



用户(一个学生模型,它有许多:答案表模型,而答案表模型又属于:学生)需要填写答案,然后点击提交。submit需要创建一个新的answersheet对象(以字符串形式包含student\u id assignment\u id和answer\u responses列)。我需要获取所有答案作为字符串,将它们连接起来(中间有一个分隔符,如“;”),新创建的应答表模型的应答需要设置为该字符串。

好的,这个问题有点开放性,但接下来

首先,您可能只需要一个表单即可实现此目标。它可以包含许多字段,但最好将所有您想要的内容保存在一个表单中(否则您将需要借助一些javascript技巧将数据放在一起)

现在我们的观点是这样的:

<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 %>
好吧,这稍微好一点,但现在有点明显,循环中的问题可以很容易地抽象成它自己的部分(可能是
\u question.html.erb
):

当前,这将发布到最初呈现页面的同一控制器/操作。您可能希望添加一个额外的路由以将其发送到自己的控制器/操作-您可以将该路由作为参数提供给。此外,这没有考虑到可能输入无效数据的可能性,在向用户显示错误消息时需要保留这些数据。它也不考虑重定向用户,或在成功提交时显示成功消息。如果您需要更多的复杂性,您可以考虑切换到并使用一个实际的应答器实例,使用更合适的REST路由。在本例中,我故意不使用表单,因为发送的数据不能直接由模型使用。你可以考虑制作<代码>答案< /Cord>一个关于解答的方法,它在保存之前被保存到<代码>应答器响应< /代码>中,或者,如果追求这个路线(或者可能在提交时用JavaScript来做,这感觉不是一个好主意)。就像我说的,有点开放。无论如何,这应该足以让你指向正确的方向——祝你好运

<%= 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 %>
<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 %>
<p>question <%= question_counter %><p/> 
<%= question.content %>
<%= content_tag :textarea , '' , name: raw( "answers[#{ question_counter }]" ) %>
<br/>
Answersheet.create( answer_responses: params[:answers].values.join(';') ) if params[:answers]