Ruby on Rails 3 - 如何检查我的控制器中的radio_button_tag?

时间:2013-04-04 14:10:18

标签: ruby-on-rails ruby-on-rails-3.2 radio-button

我在联系表单上有一个单选按钮,有人可以从中选择5个值中的1个。我没有单选按钮的默认值。我使用的是form_tag,因为这些数据不会存储在数据库中。

以下是单选按钮的代码:

    <%= label_tag "Purpose:" %>&nbsp;
    <%= radio_button_tag :purpose, '1' %><%= label_tag :purpose_feedback, 'Suggestions' %> 
    <%= radio_button_tag :purpose, '2' %><%= label_tag :purpose_prayer, 'Prayer Request' %>
    <%= radio_button_tag :purpose, '3' %><%= label_tag :purpose_praise, 'Testimony' %>
    <%= radio_button_tag :purpose, '4' %><%= label_tag :purpose_bug, 'Defects/Bugs' %>
    <%= radio_button_tag :purpose, '5' %><%= label_tag :purpose_other, 'Other' %>

我的单选按钮上有六个文本字段。我在控制器中逐字段进行错误检查,从窗体顶部的单选按钮开始。错误检查正确检查我的所有字段。但是,如果我为params [:purpose]选择一个单选按钮值,则会正确填充该值,但在显示视图时不会选中单选按钮。例如,如果我选择目的并输入三个文本字段的值,则文本字段的值仍在表单上,​​但即使目的具有值,也会取消选中单选按钮。

我找到了这个链接How to set the value of radio button after submitting form?并在我的控制器中开发了以下代码:

  def check_radio_button

    case params[:purpose]
    when '1'
      radio_button_tag(:purpose, '1', :checked => true)
    when '2'
      radio_button_tag(:purpose, '2', :checked => true)
    when '3'
      radio_button_tag(:purpose, '3', :checked => true)
    when '4'
      radio_button_tag(:purpose, '4', :checked => true)
    when '5'
      radio_button_tag(:purpose, '5', :checked => true)
    end

  end

当我尝试显示我的视图时选择第一个单选按钮(目的='1')我收到以下错误:

undefined method `radio_button_tag' for #<PagesController:0x007f94d05c5e88>

它出错的行是params [:purpose] == 1表示正确填充目的的那一行。

有关检查单选按钮的其他示例与form_for一起使用,其中数据库已更新。

任何帮助将不胜感激。我会继续寻找。

更新时间:4/4/3012美国中部时间上午11:15

现在正在检查我的单选按钮。我按照Mischa的建议将纠正后的逻辑移到了帮助者身上。

这是我的帮助代码:

  def check_radio_button (purpose)

    if params[:purpose].blank?
      radio_button_tag(:purpose, purpose)
    elsif purpose == params[:purpose]
      radio_button_tag(:purpose, purpose, :checked => true)
    else
      radio_button_tag(:purpose, purpose)
    end

  end

这是我根据Catfish建议重写的视图代码:

    <%= check_radio_button("1") %><%= label_tag :purpose_feedback, 'Suggestions' %> 
    <%= check_radio_button("2") %><%= label_tag :purpose_prayer, 'Prayer Request' %>
    <%= check_radio_button("3") %><%= label_tag :purpose_praise, 'Testimony' %>
    <%= check_radio_button("4") %><%= label_tag :purpose_bug, 'Defects/Bugs' %>
    <%= check_radio_button("5") %><%= label_tag :purpose_other, 'Other' %>

1 个答案:

答案 0 :(得分:0)

您的问题是radio_button_tag不是您的控制器中使用的功能。您发布的链接在帮助程序中包含radio_button_tag。

重新阅读您发布的问题,然后重试。

基本上你创建了一个帮助方法来渲染check_box_tag,然后在视图中调用该辅助方法:

示例助手

def my_check_box_tag(my_param) do
  ....
end

在我看来

<%= my_check_box_tag("test") %>