【问题标题】:rails4, simple_form, check_box, radio_button, controllerrails4、simple_form、check_box、radio_button、控制器
【发布时间】:2014-07-04 19:12:21
【问题描述】:

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

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),然后选择两个RORORY_BUTTONS,选择两个中的任何一个。 而且 halfday 也是一个复选框。

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

有哪些可能的方法。

【问题讨论】:

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


    【解决方案1】:

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

    你想给用户三个选项:

    “没有 ls”
    "ls 与 mrgsl"
    "ls with evesl"

    带有这些布尔值的模型说他们有 8 个。但是如果他们没有选择 ls 而您没有选择,您不希望他们选择 mrgsl不希望他们选择 mrgslevesl,对吗?

    如果您不必在每次想向“ls”添加新选项时都重新迁移数据库,这将更有意义(并使您的代码更易于维护)。所以,我正在考虑在你的模型中使“ls”成为字符串类型的数据。然后你可以给它任何你想要的值:“evesl”、“mrgsl”、“disabled”,然后再添加一些没有任何困难。 然后,您可以在控制器中处理此问题。你不会这样做

    Attendance.where(mrgsl: true)
    

    但是

    Attendance.where(ls: "msgrl")
    

    无论如何,要回答您的问题:为了做您想做的事(如果选中复选框,则显示您的单选按钮)您需要编写一些 JavaScript。

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

    最后,要使用一点 simple_form 功能,您可以为您的单选按钮创建一个"collection"

    希望对你有帮助!

    【讨论】:

    • 我基本上需要的是,当用户选择 sl(short leave) (check_box) 时,它会显示两个单选按钮(mrgsl 和 evesl),然后用户也可以选择其中一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多