1

我有一个Attendance模型,它有两个Boolean数据库属性(:late:absent),它们都有:default => false

我正在尝试制作一个只有 2 个单选按钮的表单。一份迟到,一份缺席。当然,用户只能选择两者之一。

我已经尝试了很多变化,但无法使任何工作。

谁能帮我一把?我知道我可以很容易地进行集合选择,但单选按钮将有助于用户体验。另外,出于多种原因,我需要保留 db 架构...

太感谢了!!!

4

2 回答 2

5

我不知道有任何 Rails 助手会支持开箱即用的所需功能。我也质疑可用性,因为如果模型既不迟到也不缺席但被意外点击,用户将无法取消选择任何一个单选按钮。

除此之外,我会使用 radio_button_tag 并提供两个选项,然后在您的控制器中相应地更新参数。这是一个基本示例:

<%= form_tag('/your/path') do %>
  <%= radio_button_tag :status, 'late' %>
  <%= label_tag :status_late, 'Late' %>
  <%= radio_button_tag :status, 'absent' %>
  <%= label_tag :status_absent, 'Absent' %>
  <%= submit_tag :submit %>
<% end %>

当然,您将拥有所需的任何其他字段,然后在您的控制器中类似于:

def create
  case params[:status]
  when 'late'
    params[:model_name][:late] = true
  when 'absent'
    params[:model_name][:absent] = true
  end

  ModelName.new(params[:model_name])
end

这些方面的东西应该可以解决问题。

于 2012-10-18T19:55:11.373 回答
1
@options = ["Late", "Absent"]
@selected_options = ""

<% @options.each do |option| %>
    <%=  radio_button_tag 'attendance_radio', option, option == @selected_option %> <%= label_tag 'name', option %> <br />
<% end %>

它将选定的收音机存储在attendance_radio

如果您希望表单中的值不是实际选择的值(迟到,缺席),那么您可以使用第二个参数来boolean代替

于 2012-10-18T19:11:49.243 回答