【问题标题】:"Other" text field for radio button collection in RailsRails 中单选按钮集合的“其他”文本字段
【发布时间】:2015-03-13 08:57:35
【问题描述】:

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

我几乎可以让它工作,但是在编辑记录时,当填充candidate_name_other 时,我无法正确选择candidate_name 收音机。

型号:

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 %>

所以当我选择了“其他”单选,输入了一个替代值,保存并加载了编辑操作时,我希望看到这个:

但我实际看到的是这样的:

这是有道理的,因为为了将收音机选为“其他”,该值需要是“其他”而不是“foobar”。如何将正确的“其他”值发送到candidate_name 进行显示?

【问题讨论】:

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


    【解决方案1】:

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

        = form.radio_button :database, 'hidden_radio', style: "display:none"
        = form.input :whatever, as: :text, label: false, class: "form-control"
      Something
    

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

    :javascript
      var re = document.getElementById("id_of_text_field");
      var cd = document.getElementById("id_of_radio_button");
      re.onclick = function(){
        cd.setAttribute("checked", "checked");
        cd.value = re.value;
      };
    

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

    【讨论】:

      【解决方案2】:

      可以将 :checked => true 传递给 radio_button,因此您可以有一些自定义逻辑来确定如果 name 不在其他值的集合中,是否应该检查 radio。看起来有点乱,但可行。

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

      【讨论】:

        【解决方案3】:

        我在这里描述了一个非常相似的问题: 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 对于第一个答案,我无法将建议的解决方案扩展到对我来说可行的解决方案,而第二个答案太复杂,甚至无法尝试。

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

        【讨论】:

          猜你喜欢
          • 2018-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-16
          • 1970-01-01
          • 2016-03-16
          • 2020-05-02
          • 2023-03-13
          相关资源
          最近更新 更多