从 Rails 4 视图上的单选按钮获取输入
Posted
技术标签:
【中文标题】从 Rails 4 视图上的单选按钮获取输入【英文标题】:getting the input from radio buttons on rails 4 view 【发布时间】:2015-03-18 10:54:43 【问题描述】:我正在为我们正在使用的应用程序开发一个新视图(Ruby 2.0.0 上的 Rails 4.1.6)。该模型具有integer
属性max_operations
。这是我们设置然后使用的限制。
它可以是自然数或-9,我们表示没有限制。在_form.html.erb
上,我希望它看起来像这样:
[...]
最大操作数
⃝无限制
⃝限制:□(代表文本框的小方块)
[...]
如果选择了无限制选项,则为 max_operations
传递的值将为 -9,如果选择了限制选项,则将传递在相邻文本框中键入的数字。
我还希望在编辑记录时正确显示该字段(如果需要,选择正确的单选,在文本框中显示的值)。
我不知道从哪里开始。试图模仿一些代码示例是完全失败的。 我确实设法制作了这个,这可能是我在过去 15 年中编写的最丑陋的代码:
<input type="radio" id="operation_date_max_operations_unlimited" name="operation_date[max_operations]" <%= @operation_date.max_operations==-9?"checked=checked":"" %> value="-9"> <%=t("unlimited")%>
<br>
<input type="radio" id="operation_date_max_operations_limited" name="operation_date[max_operations]" <%= @operation_date.max_operations==-9?"":"checked=checked" %> value=<%= @operation_date.max_operations%> ><%=t("max_operations")%>:
<input type="text" id="max_operations_limit" name="operation_date[max_operations]" value=<%= @operation_date.max_operations==-9?"":@operation_date.max_operations %> >
它确实很好地显示了东西,但在保存时更改值不起作用,所以我很高兴以一种简洁的方式重新编写整个东西。
我想在 erb 代码(<%=f.radio_button
等)中尽可能多地保留它,js 越少越好。有什么想法吗?
【问题讨论】:
你在哪一点失败了?您是否设法将单选按钮和文本字段添加到表单中? @sebkomianos 请参阅编辑。 【参考方案1】:首先,用一个特殊的数字来表示某事通常不是一个好主意。
也就是说,为了坚持这种方法但也让它更“整洁”,您可以在 OperationDate
模型中使用一个方法来告诉您是否有限制:
def limited_operations?
(max_operations == -9)? true : false
end
然后,在您看来,您可以开始使用以下单选按钮来满足您的需求:
<%= f.radio_button :max_operations, -9, :checked => @operation_date.limited_operations? %>
<%= f.radio_button :max_operations, @operation_date.max_operations, :checked => @operation_date.limited_operations? %>
<%= f.text_field :max_operations, :value => @operation_date.limited_operations? ? @operation_date.max_operations : "" %>
您已经可以看到这里的危险:文本字段允许给出任何类型的值..
【讨论】:
好吧,我已经这样做了。这导致在选择“无限”收音机时传递 nil 而不是 -9。 另外,模型中有验证器来确保它的价值。一旦我选择了“无限”单选,我希望表单会忽略文本框中的值,但这种情况不会发生。我认为它只是在框中分配值,而不考虑单选选项。 @Spätzle 你试过改变按钮的顺序看看会发生什么吗? 是的,这并没有改变任何东西。无论如何它都会传递文本框的值。 你有什么想法吗?以上是关于从 Rails 4 视图上的单选按钮获取输入的主要内容,如果未能解决你的问题,请参考以下文章