sinatra:在一种布局中多次产生相同的形式,迭代名称

sinatra: yield the same form multiple times in one layout, iterating names

我正在编写一个简单的单页应用程序。现在 form.erb 有 16 个静态书写形式,除了它们的名称和 ID 外,它们都是相同的。我想在 form.erb 只有一份表格副本但迭代名称和 ID 16 次的地方制作它。

'/' 被路由到 form.erb

get '/' do
    erb :form
end

当前layout.erb正文是

<body>

<h2>Relay Setup</h2>
<h2><p id="CurrentTime"></p></h2>
<p><strong>Note:</strong> Set On/Off times for each relay respectively.</p>

<%= yield %>

</body>

当前form.erb是

<form name="relay1" id="relay1" action="/" method="POST">
    <input name="relay1" type="hidden">
    <input name="label" id="label" type="text" value="<%= @label %>";">
    <input type="button" value="Add ON/OFF time" onClick="addInput('relay1');">
    <input type="submit">
</form>

我已经在路由器中尝试了 for 循环但没有成功。 我是只使用 more <%= yield %> 并在路由器中迭代名称,还是在布局中设置标志?如果没有,是否有其他更合适的方法来完成此操作?

提前致谢...

is there some other, more proper way to accomplish this?

你可以这样做:

routes.rb:

get '/' do 

  @names_and_ids = [
    %w[nameA idA],
    %w[nameB idB],
    %w[nameC idC]
  ]

  erb :my_form

end

my_form.erb:

<% @names_and_ids.each do |(name, id)| %>

  <form name="<%= name %>" id="<%= id %>" action="/" method="POST">
    <input name="relay1" type="hidden">
    <input name="label" id="label" type="text" value="<%= @label %>";">
    <input type="button" value="Add ON/OFF time" onClick="addInput('relay1');">
    <input type="submit">
  </form>

<% end %> 

并为 views/layout.erb 使用以下内容:

<!DOCTYPE html>
<head><title>Sinatra App</title></head>
<body>

<h2>Relay Setup</h2>
<h2><p id="CurrentTime"></p></h2>
<p><strong>Note:</strong> Set On/Off times for each relay respectively.</p>

<%= yield %>

</body>
</html>

将生成以下 html:

<!DOCTYPE html>
<head><title>Sinatra App</title></head>
<body>

<h2>Relay Setup</h2>
<h2><p id="CurrentTime"></p></h2>
<p><strong>Note:</strong> Set On/Off times for each relay respectively.</p>


  <form name="nameA" id="idA" action="/" method="POST">
    <input name="relay1" type="hidden">
    <input name="label" id="label" type="text" value="";">
    <input type="button" value="Add ON/OFF time" onClick="addInput('relay1');">
    <input type="submit">
  </form>


  <form name="nameB" id="idB" action="/" method="POST">
    <input name="relay1" type="hidden">
    <input name="label" id="label" type="text" value="";">
    <input type="button" value="Add ON/OFF time" onClick="addInput('relay1');">
    <input type="submit">
  </form>


  <form name="nameC" id="idC" action="/" method="POST">
    <input name="relay1" type="hidden">
    <input name="label" id="label" type="text" value="";">
    <input type="button" value="Add ON/OFF time" onClick="addInput('relay1');">
    <input type="submit">
  </form>



</body>
</html>

看起来像这样:

你真的想要多个提交按钮吗?

7stud 的回答让我在我的 form.erb 文件中找到了这个解决方案。再次感谢!

<!DOCTYPE html>
<% (1..16).each do |i| %>
    <form method="POST" action="/" id="relay<%= i %>">
        <input name="relay<%= i %>" type="hidden">
        <input name="label" type="text" value="";">
        <input type="button" value="Add ON/OFF time" onClick="addInput('relay<%= i %>');">
        <input type="submit">
    </form>
<% end %>