Rails中单选按钮集合的“其他”文本字段

时间:2015-01-15 01:25:07

标签: ruby-on-rails ruby-on-rails-4

我有一个带有字段candidate_name的模型,它在表单上显示为单选按钮的集合。其中一个单选按钮是“其他”选项,显示candidate_name_other虚拟属性。在candidate_name_other中输入值时,我想将该值存储在数据库的candidate_name字段中。

我几乎可以使用它,但在编辑记录时,我无法在填充candidate_name时正确选择candidate_name_other无线电。

型号:

class Question < ActiveRecord::Base

  attr_accessor :candidate_name_other

  def candidate_name_other=(value)
    self.candidate_name = value if candidate_name == 'other'
  end

  def candidate_name_other
    candidate_name
  end
end

表单字段:

<%= f.collection_radio_buttons(:candidate_name, [['candidate', 'Candidates'], ['option', 'Options'], ['other', 'Other']], :first, :second) do |b| %>
  <% b.label do %>
    <%= b.radio_button %><%= b.text %>
  <% end %>
<% end %>
<%= f.text_field :candidate_name_other %>

因此,当我选择“其他”收音机,输入备用值,保存并加载编辑操作时,我希望看到:

enter image description here

但我实际看到的是:

enter image description here

这是有道理的,因为为了将无线电选择为“其他”,该值必须是“其他”而不是“foobar”。如何将正确的“其他”值发送到candidate_name进行显示?

3 个答案:

答案 0 :(得分:1)

我有几个单选按钮,其中一个应该附加到文本字段。这就是我想到的。 我在一个隐藏的单选按钮附近创建了一个文本输入字段:

TreeView

然后我使用JavaScript为单选按钮分配了一个文本输入值,并选中了按钮:

Form

如果文本输入到文本字段 - 它将保存到数据库中。如果选中另一个单选按钮 - 其值将保存到数据库中。 希望它能帮到像我这样的新手

答案 1 :(得分:0)

可以通过:checked =&gt;对于radio_button属于true,因此您可以使用一些自定义逻辑来确定是否应该检查无线电是否名称不在其他值的集合中。看起来有点乱,但可行。

另一个选择是使用“include ActiveModel :: Model”创建一个表单对象(更接近Django方式)。在该类中,为candidate_name和candidate_name_other提供单独的属性,以使表单逻辑简单。然后,该类可以负责将数据作为单个字段存储在您的真实ActiveRecord模型中,并将其提取回两个属性。

答案 2 :(得分:0)

我有一个非常类似的问题: Using Rails 3.2 and Rails form - don't know how to display an input text field when a radio button is checked true and hide it otherwise

我尝试使用此处建议的内容: Mixing radio buttons and text_field 对于第一个答案,我无法将建议的解决方案扩展到我的工作解决方案,第二个答案太复杂,甚至无法尝试。

根据您的代码,我能够修复我的。请查看我自己的问题的答案,也许会对你有用。我想解决方案也可能与你之前收到的第一个答案一致。