collection_radio_buttons:如何围绕每个单选按钮包装标签?

时间:2018-02-05 20:55:38

标签: form-for ruby-on-rails-5 collection-radio-buttons

collection_radio_buttons()rails 5.1 docs中定义如下:

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

在文档中没有解释options参数是什么。 simple_form docs表示有一个名为item_wrapper_tag的选项。

我一直在尝试这个:

<%= form_for(:an_article, url: "blah") do |f| %>

<%= f.collection_radio_buttons(
  :author_id, Author.all, 
  :id, 
  :name_with_initial,
  {item_wrapper_tag: :div}  #<=== HERE *****
) 
%>

<% end %>

我已经尝试了键item_wrapper_tag和值div的每个符号和字符串组合,并且在div中包含每个单选按钮都没有成功。

有人知道rails是否有与item_wrapper_tag类似的选项?

2 个答案:

答案 0 :(得分:0)

尝试使用gem simple_form表单。那么下面的代码应该可以使用。

  • gem simple_form
  • 中添加Gemfile
  • 运行bundle install
  • 运行rails generate simple_form:install

然后在视图中创建一个simple_form,如下所示:

<%= simple_form_for @post do |f| %>

    <%= f.collection_radio_buttons( :author_id, Author.all, :id, :name_with_initial, item_wrapper_tag: :div) %>

<% end %>

注意:我刚刚从APIDock的collection_radio_buttons开始。

这可能会成功。 :)

答案 1 :(得分:0)

好的,我明白了:

<%= form_for(:an_article, url: "blah") do |f| %>

<%= f.collection_radio_buttons(
  :author_id, Author.all, 
  :id, 
  :name_with_initial,
) do |b|
%>

<div>
  <%= b.radio_button %>
  <%= b.label %>
</div>

<% end %>  #collection_radio_buttons do block
<% end %>  #form_for do block
对于| b | uilder对象,

radio_buttonlabelbuiltin methods

  

传递给块的参数是一种特殊的构造器   集合,具有生成标签和广播的能力   集合中当前项目的按钮...使用它,您可以   更改标签和单选按钮显示顺序甚至使用标签   作为包装......

其他信息:

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

collection:    For each element in collection, a radio button and label tag is created.  
value_method:  Called on each element in collection, and the return value is assigned to 
               the value attribute of the radio button. 
object.method: If the return value of object.method is equal to the value attribute of a radio button,
               the radio button gets a checked="checked" attribute.
text_method:   Called on each element in collection, and the return value is used as 
               the text for the label tag. 
options:       Unknown purpose.
html_options:  Used to specify additional html attributes for the radio button, e.g. {class: 'group1'}

使用form_for()时,object参数是f封装的对象,因此省略了object参数:

f.collection_radio_buttons(method, 
                           collection, 
                           value_method, text_method, 
                           options={}, html_options={}, &block)
在此对象上调用

method

             |
             V
form_for(:an_article, url: "blah") do |f|