rails4,simple_form,check_box,radio_button,controller

时间:2014-05-16 05:54:04

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

我使用脚手架生成了一个模型。

rails g scaffold attendance ename:string entertime:datetime sl:boolean mrgsl:boolean evesl:boolean halfday:boolean 

现在我想用simple_form显示这个,我想在它们之间建立这些关系:

  

SL - >有两种类型i)mrgsl。 ii)evesl。

所以当选择sl(check_box)时,它会显示两个radio_buttons,并选择两个中的任何一个。 半天也是一个check_box。

<%= simple_form_for @attendance, :html => { :class => 'form-horizontal' } do |f| %>
<%= f.input :ename %>
<%= f.input :entertime, as: :time %>
<%= f.input :sl, as: :check_box %>
<%= f.input :mrgsl, as: :radio_button %>
<%= f.input :evesl, as: :radio_button %>
<%= f.input :halfday, as: :check_box %>

  <div class="form-group">
    <div class='col-md-offset-2 col-md-10'>
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
                  attendances_path, :class => 'btn btn-default' %>
    </div>
  </div>
<% end %>

这就是我试图这样做的方法,但它不起作用,。

RuntimeError in Attendances#new

Showing /home/pallavsharma/Workspace/crm/app/views/attendances/_form.html.erb where line #4 raised:

No input found for check_box

1<%= simple_form_for @attendance, :html => { :class => 'form-horizontal' } do |f| %>
2<%= f.input :ename %>
3<%= f.input :entertime, as: :time %>
4<%= f.input :sl, as: :check_box %>
5<%= f.input :mrgsl, as: :radio_button %>
6<%= f.input :evesl, as: :radio_button %>
7<%= f.input :halfday, as: :check_box %>

有什么可行的方法。

1 个答案:

答案 0 :(得分:1)

首先,如果我正确理解您所写的内容,您可能需要重新构建模型以更好地适应您的逻辑。

您想为用户提供三个选项:

  

&#34; no ls&#34;
  &#34; ls with mrgsl&#34;
  &#34; ls with evesl&#34;

你的模特和这些布尔人说他们有8个。但如果他们没有选择 ls 你就不希望他们选择 mrgsl 并且你不希望他们选择 mrgsl evesl ,我是对的吗?

如果您不想在每次向&#34; ls&#添加新选项时不必重新迁移数据库,那么这将更有意义(并使您的代码更容易维护) 34 ;.所以,我正在考虑制作&#34; ls&#34;模型中的字符串类型数据。然后你可以给它任何你想要的价值:&#34; evesl&#34;,&#34; mrgsl&#34;,&#34;禁用&#34;然后,添加一些没有任何困难。 然后,您可以在控制器中处理此问题。你不会做

Attendance.where(mrgsl: true)

但是

Attendance.where(ls: "msgrl")

无论如何,要回答你的问题:为了做你想做的事情(如果勾选复选框就会出现你的单选按钮),你需要写一些JavaScript。

您可以在this thread中找到所有内容,使其按您希望的方式运行。

最后,要使用一些simple_form电源,您可以为单选按钮设置"collection"

希望它有所帮助!