<div dir="ltr"><div>For wizards on Rails I personally prefer a full controller, views, and model for each stage in the wizard. I came to this conclusion after using wicked amongst other things. At first this seems counter-intuitive, overkill, and far to complex but it has several benefits.</div><div><br></div><div>- you have full control</div><div>- conditional validation is super easy, and very clear</div><div>- conditional routing depending on step results is fairly straightforward</div><div>- you progress is recorded each time you submit a step</div><div>- you don't have to do anything in js</div><div><br></div><div>As far as the models go, you just create your basic rails model. Then for each stage in the wizard you subclass the model (I store these in form_models). So you get something like</div><div><br></div><div><span style="font-family:monospace">class Tax::AdditionalIncome < Tax</span></div><div><span style="font-family:monospace">  validates: xxx</span></div><div><span style="font-family:monospace">  validates: yyy</span></div><div><span style="font-family:monospace">  ...</span></div><div><span style="font-family:monospace">end</span></div><div><br></div><div>The same applies to controllers and views, everything is just the same as bog standard rails form. This approach is initially a lot slower, creating each step takes more time, but you more than make up for that when you have to tweak steps, change orders etc. etc.</div><div><br></div><div>All best</div><div><br></div><div>Andrew<br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 22 Jul 2020 at 10:37, Ed James <<a href="mailto:ed.james.spam@gmail.com">ed.james.spam@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;">Hi all<div><br></div><div>Does anyone have any experience with building out a complex questionnaire engine?</div><div>I’m very interested in hearing what people have done and whether you wrote from scratch or used any 3rd-party tools/gems/etc.</div><div><br></div><div>Some of the things I need to be able to handle are:</div><div><br></div><div><ul><li>Complex routing through the questionnaire based on answers to previous question(s)</li><li>Scoring/weighting of answers to calculate a final score</li><li>Grouping of weighted questions to allow for score calculations of “question groups”</li><li>Ability to “resume” questionnaire</li><li>Ability to “go back” through previous questions to change answers before completion</li></ul><div><br></div><div>Any advice/insights would be greatly appreciated.</div><div><br></div><div>Thanks!</div><div>
<br>
<hr style="display:block;height:1px;border-color:rgb(204,204,204) currentcolor currentcolor;border-style:dotted none none;border-width:1px 0px 0px;margin:5px 0px;padding:0px">
<br>
<table width="100%" cellpadding="0" border="0">
  <tbody>
    <tr>
      <td width="70" valign="top">
        <img style="margin: 8px 8px 0px 0px;" height="60">
      </td>
      <td style="font-family:"Lucida Grande",sans-serif">
          <span style="font-weight:bold;color:rgb(51,51,51);font-size:18px;line-height:30px">Ed James</span>
          <br>
          <span style="font-weight:normal;color:rgb(153,153,153);font-size:12px;line-height:16px">
              <a href="mailto:ed.james.spam@gmail.com" style="color:rgb(153,153,153);text-decoration:none" target="_blank">I will respect your spam</a>
          </span>
      </td>
    </tr>
  </tbody>
</table>

</div>

<br></div></div>_______________________________________________<br>
Chat mailing list<br>
<a href="mailto:Chat@lists.lrug.org" target="_blank">Chat@lists.lrug.org</a><br>
Archives: <a href="http://lists.lrug.org/pipermail/chat-lrug.org" rel="noreferrer" target="_blank">http://lists.lrug.org/pipermail/chat-lrug.org</a><br>
Manage your subscription: <a href="http://lists.lrug.org/options.cgi/chat-lrug.org" rel="noreferrer" target="_blank">http://lists.lrug.org/options.cgi/chat-lrug.org</a><br>
List info: <a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" rel="noreferrer" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div>------------------------</div>Andrew Premdas<div><a href="http://blog.andrew.premdas.org" target="_blank">blog.andrew.premdas.org</a></div></div>