我一直在尝试创建一个基本上是一系列是或否问题的向导表单。表格中还有几页,用户在继续之前必须选择多个选项。
现在所有的对象参数都是布尔值,但我见过的所有向导示例都涉及基本形式(text_fields,check_box等)。
我想我可能会做这样的事情:
<div class="button1">
<%= f.hidden_field :newsletter, value: "1" %>
<%= f.submit "Yes" %>
</div>
<div class="button2">
<%= f.hidden_field :newsletter, value: "0" %>
<%= f.submit "No" %>
</div>
但它似乎没有保存价值。 我正在使用邪恶的宝石作为向导,并且正在关注this RailsCast tutorial
注意:像text_fields这样的普通字段会保存,而不是这些按钮布尔值。
答案 0 :(得分:0)
这些按钮和隐藏字段都采用相同的形式。因此,任何一个按钮都会提交表单,当表单提交时,它会将所有字段的值收集到params中。
你可以做的是将按钮本身变成输入,通过参数发送。这与“name”和“value”属性一样,与任何其他属性一样:
<input type="submit" value="foo" name="bar" />
<input type="submit" value="chunky" name="bacon" />
现在,如果您使用第一个按钮提交,则会在参数中获得:bar => "foo"
,如果您使用第二个按钮提交,则会获得:bacon => "chunky"
。
传统名称是“提交”。使用rails submit_tag时,它会将“name”设置为“commit”,并将“value”设置为按钮的文本。因此,您应该在参数中看到:commit => "Yes"
或:commit => "No"
,并相应地更改您的逻辑。
答案 1 :(得分:0)
最好使用jQuery触发事件并相应地添加隐藏的输入
<div class="button1">
<%= f.submit "Yes", class: "wizard-btn" %>
</div>
<div class="button2">
<%= f.submit "No", class: "wizard-btn" %>
</div>
... ...
示例coffeescript代码如下所示:
jQuery ->
$(".wizard-btn").on "click", (e) ->
e.preventDefault()
thisForm = $(".wizard-form")
hideDiv = "<input type=\"hidden\" name=\"newsletter\" />"
if $(this).val() == "Yes"
thisForm.append $(hideDiv).val("1")
else if $(this).val() == "No"
thisForm.append $(hideDiv).val("0")
thisForm.get(0).submit()
我假设你的表单有一个名为wizard-form