Ruby on rails 在应用程序\u助手中创建自定义单选按钮助手

Ruby on rails 在应用程序\u助手中创建自定义单选按钮助手,ruby-on-rails,ruby-on-rails-3,twitter-bootstrap,Ruby On Rails,Ruby On Rails 3,Twitter Bootstrap,我想通过引导创建自定义单选按钮。 我做到了,但我想在application_helper中添加此控件 我当前的解决方案 <div class="btn-group" data-toggle="buttons-radio"> <% @engines2.each do |e| %> <button type="button" class="btn <%= @car.engine_id == "#{e.id}".to_i ? 'activ

我想通过引导创建自定义单选按钮。 我做到了,但我想在application_helper中添加此控件

我当前的解决方案

<div class="btn-group" data-toggle="buttons-radio">
      <% @engines2.each do |e| %>
        <button type="button" class="btn <%= @car.engine_id == "#{e.id}".to_i ? 'active' : '' %>" data-toggle="button" onclick="javascript:document.getElementById('car_input_engine_id').value='<%= "#{e.id}" %>'">
            <%= "#{e.name}" %>
        </button>
      <% end %>
      <input type="hidden" id="car_input_engine_id" name="car[input_engine_id]" value="<%= @car.engine_id %>" />
 </div>

但它不起作用。有什么想法吗?

看看这个片段:

  engines.each do |e|
    ...
  end
它预成型了一些东西,但它的结果正在消失,因为它后面还有一行:

content_tag :input, :type => :hidden, :id=>"car_input_engine_id", :name=>"car[input_engine_id]", :value=>car_engine_id
因此,您必须连接两个结果:of
引擎。每个…
和此行的结果

我认为您计划制作
引擎。映射
而不是
引擎。每个
:获取一组
按钮
-标签

然后您必须修复这一行:

:class=>'btn #{car_engine_id == #{e.id}.to_i ? "active" : ""}',
您试图执行插值(
{..}
),但将其包装在单引号中。如果字符串中有混合单引号/双引号,则可以使用
%[…]
(其中
[
是一个首选项问题,如果需要,可以使用
%{…}
或其他方括号)

另外,
content\u标签
对于
input
不合适。
input
标签必须包含哪些内容?对,根本没有内容!因此请使用简单的
tag
助手

下面是我得到的:

def checkbox_bootstrap_tag(engines, car_engine_id)   
  content_tag :div, :class=>"btn-group", "data-toggle"=>"buttons-radio" do
    engines_html = engines.map do |e|
        content_tag :button, 
          :type => :button,
          :class=> %[btn #{car_engine_id == e.id ? "active" : ""}], 
          :data => {:toggle => "button"},
          :onclick=> "javascript:document.getElementById('car_input_engine_id').value=#{e.id}" do
            e.name       
        end
      end
    safe_join(engines_html) +
      tag(:input, :type => :hidden, :id=>"car_input_engine_id", :name=>"car[input_engine_id]", :value=>car_engine_id)
  end
 end
注意
safe\u join
的用法:此帮助程序用于将数组元素与HTML标记合并(在输出之前不转义它们)


另外,
:data=>{:toggle=>“button”},
部分必须告诉您,Rails助手知道这个属性。

太好了!非常感谢。
:class=>'btn #{car_engine_id == #{e.id}.to_i ? "active" : ""}',
def checkbox_bootstrap_tag(engines, car_engine_id)   
  content_tag :div, :class=>"btn-group", "data-toggle"=>"buttons-radio" do
    engines_html = engines.map do |e|
        content_tag :button, 
          :type => :button,
          :class=> %[btn #{car_engine_id == e.id ? "active" : ""}], 
          :data => {:toggle => "button"},
          :onclick=> "javascript:document.getElementById('car_input_engine_id').value=#{e.id}" do
            e.name       
        end
      end
    safe_join(engines_html) +
      tag(:input, :type => :hidden, :id=>"car_input_engine_id", :name=>"car[input_engine_id]", :value=>car_engine_id)
  end
 end