如何在 Sinatra 中处理来自单个 select 字段的多个值?
How do I handle multiple values from a single select field in Sinatra?
我有一个 HTML 表单,页面中有一个元素是 Sinatra 应用程序的一部分,例如
<form action="/form" method="post">
<p>
<label for="text">Text</label>
<input type="text" name="text" id="text">
</p>
<p>
<label for="select">Selection</label>
<select name="select" id="select">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
</p>
<p>
<label for="multi_select" multiple>MultipleSelection</label>
<select name="multi_select" id="multi_select" multiple>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
</p>
<p>
<input type="submit" name="submit" value="Submit">
</p>
</form>
如果用户从 multi_select 中选择 A 和 C,Sinatra 中的 POST 处理程序应该 return 选择的值,但是因为 params
是一个哈希,它只有 return 是最后选择的值(所以 params[:multi_select]
= "C")。
由于各种原因,我无法使用 Javascript 或其他前端技巧来更改值的发送方式。有没有一种好的方法可以在服务器端正确处理这个问题?在这个项目之前,我并没有与 Sinatra 合作太多。
This discussion 意味着多选的名称需要看起来像一个数组,以便 Sinatra 获取所有值。尝试将其更改为:
<select name="multi_select[]" id="multi_select" multiple>
我有一个 HTML 表单,页面中有一个元素是 Sinatra 应用程序的一部分,例如
<form action="/form" method="post">
<p>
<label for="text">Text</label>
<input type="text" name="text" id="text">
</p>
<p>
<label for="select">Selection</label>
<select name="select" id="select">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
</p>
<p>
<label for="multi_select" multiple>MultipleSelection</label>
<select name="multi_select" id="multi_select" multiple>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
</p>
<p>
<input type="submit" name="submit" value="Submit">
</p>
</form>
如果用户从 multi_select 中选择 A 和 C,Sinatra 中的 POST 处理程序应该 return 选择的值,但是因为 params
是一个哈希,它只有 return 是最后选择的值(所以 params[:multi_select]
= "C")。
由于各种原因,我无法使用 Javascript 或其他前端技巧来更改值的发送方式。有没有一种好的方法可以在服务器端正确处理这个问题?在这个项目之前,我并没有与 Sinatra 合作太多。
This discussion 意味着多选的名称需要看起来像一个数组,以便 Sinatra 获取所有值。尝试将其更改为:
<select name="multi_select[]" id="multi_select" multiple>