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

时间:2016-07-13 00:53:49

标签: ruby forms sinatra yield

我正在编写一个简单的单页应用。现在,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循环但没有成功。 我是否只使用更多&lt;%= yield%&gt;并在路由器中迭代名称,或者在布局中是否设置了标志?如果没有,是否有其他更合适的方法来实现这一目标?

提前致谢...

2 个答案:

答案 0 :(得分:0)

  

还有其他一些更合适的方法来实现这个目标吗?

你可以这样做:

<强>的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>

看起来像这样:

enter image description here

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

答案 1 :(得分:0)

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 %>
相关问题