从 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 代码(&lt;%=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 视图上的单选按钮获取输入的主要内容,如果未能解决你的问题,请参考以下文章

将下拉选择输入转换为需要选择一个的单选按钮

表单验证失败后表单上的单选按钮无法正确呈现 - 引导

Python Tkinter 中的单选按钮值

C#单选按钮测验[重复]

仅从选定的单选按钮选项提交表单数据

更改单选按钮选中状态时如何从单选按钮组中的单选按钮获取文本