【问题标题】:simple_form_for rails radio button inlinesimple_form_for rails 单选按钮内联
【发布时间】:2012-04-16 15:18:45
【问题描述】:

我正在尝试让我的按钮显示内联并且还具有默认值,因为它不能为空。我正在使用 plataformatex/simple_form 和 bootstrap。

= f.collection_radio_buttons :is_private, [[true, 'Private'], [false, 'Public']], :first, :last, style: "display:inline", default: true

它正在渲染这个:

<span>
  <input id="workout_is_private_true" name="workout[is_private]" type="radio" value="true" />
  <label class="collection_radio_buttons" for="workout_is_private_true">Private</label>    
</span>
<span>
  <input id="workout_is_private_false" name="workout[is_private]" type="radio" value="false" />
  <label class="collection_radio_buttons" for="workout_is_private_false">Public</label>
</span>

很明显style: 无法正常工作,但我不确定什么会起作用。

根据我添加的另一个建议

.radio_buttons { display:inline; }

= f.collection_radio_buttons :is_private, [[true, 'Private'], [false, 'Public']], :first, :last, :item_wrapper_class => 'radio_buttons', :default => true

得到:

<span class="radio_buttons">
  <input id="workout_is_private_true" name="workout[is_private]" type="radio" value="true" />
  <label class="collection_radio_buttons" for="workout_is_private_true">Private</label>
</span>
<span class="radio_buttons">
  <input id="workout_is_private_false" name="workout[is_private]" type="radio" value="false" />
  <label class="collection_radio_buttons" for="workout_is_private_false">Public</label>
</span>

请注意,默认值仍然无效。

【问题讨论】:

    标签: css ruby-on-rails forms twitter-bootstrap simple-form


    【解决方案1】:

    你可以试试

    f.collection_radio_buttons :options, [[true, 'Yes'] ,[false, 'No']], :first, :last ,:style =>"display:inline", :default => true
    

    不太确定您将哪个 gem 用于简单形式,但这是您可以尝试的源或参考

    collection_radio_buttons(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
    

    【讨论】:

    • 我用:style =&gt;"display:inline", :default =&gt; true 试过了,但没用。我也试过:html_options =&gt; { :style =&gt; "display:inline" } 没有结果。它甚至没有显示在源代码中。
    • 我遇到了同样的问题trev9065。你找到解决办法了吗?
    【解决方案2】:

    如果您希望它们内联,则需要通过执行以下操作为标签提供内联类::item_wrapper_class =&gt; 'inline'

    这是使用您的代码的示例:

    = f.input :is_private, 
              :collection => [[true, 'Private'], [false, 'Public']], 
              :label_method => :last, 
              :value_method => :first,
              :as => :radio_buttons, 
              :item_wrapper_class => 'inline',
              :checked => true
    

    编辑:我刚刚意识到我的答案更具体到 simple_form + bootstrap,因为 bootstrap 在给标签的内联类时已经定义了样式。不过,您应该可以使用我的示例,在创建自定义 css 时需要做更多工作。

    【讨论】:

    • @trev9065 我使用您的代码在我的答案中添加了一个示例,您可以尝试一下,看看它是否有效?
    • 感谢工作!您是否知道如何默认选择其中之一?
    • 如果你这样做 :checked => true,那么当你更新它时它永远是 true,即使它被设置为 false
    • @Said 我不确定如何在 simple_form 的可用选项中完成,但对属性进行简单的三元检查 nil 将起作用::checked =&gt; (@object.is_private.nil? ? true : @object.is_private)。如果@objectis_private 属性值为nil,则true 是默认值,否则直接使用该属性的值。
    • 感谢您指出 item_wrapper_class - 在自述文件中没有看到任何内容,但正是我需要的!
    【解决方案3】:

    上面的答案可能不起作用,因为我没有使用 Bootstrap。但还有其他方法。我在按钮周围拍了一个带有 class="radio-buttons" 的 div 并手动标记。然后我将它添加到我的样式表(SASS)中:

    .radio-buttons {
      margin: .5em 0;
      span input {
        float: left;
        margin-right: .25em;
        margin-top: -.25em;
      }
      #this grabs the MAIN label only for my radio buttons 
      #since the data type for the table column is string--yours may be different
      label.string { 
        margin-bottom: .5em !important;
      }
    
      clear: both;
    }
    
    .form-block {
      clear: both;
      margin-top: .5em;
    }
    
     .radio-buttons span {
      clear: both;
      display:block;
     }
    

    这将使所有框架上的单选按钮内联,尽管这已被调整为最适合 Zurb Foundation。 ;)

    【讨论】:

      【解决方案4】:

      在 Bootstrap 3 中使用 Simple Form,您可以使用 radio 类以及 item_wrapper_classitem_wrapper_tag 选项。

      = f.collection_radio_buttons :sort, [[foo,bar],[foo,bar],
        :first, :last,
        item_wrapper_class: :radio,
        item_wrapper_tag: :div
      

      【讨论】:

        【解决方案5】:

        一个简单的解决方案:

        向项目包装器添加一个类。这个类可以是你选择的任何东西。我在下面的示例中使用“内联”:

        form.input :my_field, as: 'radio_buttons' wrapper_html: {class: 'inline'}
        

        然后定义一些仅适用于单选按钮组的 CSS(并且仅适用于实际的单选按钮,而不是项目标签):

        input.radio_buttons.inline label.radio{
          display: inline-block;
        }
        

        下面是一个例子:

        【讨论】:

        • 也许它已被删除,但使用 as: 'radio' 会给我一个 No input found for radio 错误。
        • 啊,我相信是“radio_buttons”。更新了我的答案,让我们知道这是否有效。很抱歉造成混乱。
        【解决方案6】:

        只为那些使用简单表单复选框的人来这里:

        超薄视图:

        = f.input :company_stages, as: :check_boxes, required: true
        

        scss:

        // simple-form checbox
        .checkbox {
            margin-right: 20px;
            display: inline-block;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-04
          • 1970-01-01
          • 2013-07-14
          • 1970-01-01
          • 2016-04-24
          • 2017-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多