如何使标签标题和输入值相同,但id不同

时间:2014-10-08 12:38:35

标签: ruby-on-rails ruby formtastic

我有疑问,我如何使标签标题和输入值相同,但id是不同的。下面的代码显示了我想要的内容。

<%= f.input :building_type, :label_html => {:class => "ui-priority n1"}, 
    label: "Building type", collection: Post::Flat::BUILDING_TYPES, as: :radio %>


Post::Flat::BUILDING_TYPES = [["Flat-super", 1], ["Flat-middle", 2]]

输出代码:

<div class="radio">
  <label class="choice" for="post_flat_building_type-1">
    <input id="post_flat_building_type-1" name="post_flat[building_type]" type="radio" value="1">
    Flat-super
  </label>
</div>
<div class="radio">
  <label class="choice" for="post_flat_building_type-2">
    <input id="post_flat_building_type-2" name="post_flat[building_type]" type="radio" value="2">
    Flat-middle
  </label>
</div>

但我想让价值等于 Flat-super,Flat-middle ,我怎么能实现这个目标?

感谢您的帮助!

Formtastic版本 - 2.3 Formtastic-bootstrap版本 - 3.0

-----一些补充----

有人告诉我可以通过将初始数组更改为

来解决此问题
Post::Flat::BUILDING_TYPES = [["Flat-super", "Flat-super"], ["Flat-middle", "Flat-middle"]]

但是,如果我有西里尔语,它就行不通了。

Post::Flat::BUILDING_TYPES = [["Кирпичный", "Кирпичный"]

<div class="radio">
  <label class="choice" for="post_flat_building_type">
   <input id="post_flat_building_type" name="post_flat[building_type]" type="radio" value="кирпичный">
    кирпичный
  </label>
</div>

您可以观察到输出包含错误的id,如果我的数组中有多个对象,则会影响输出。所有输入都具有相同的ID。

3 个答案:

答案 0 :(得分:2)

如果您不需要“漂亮”的html和id \进行命名,则可以使用.hash方法使其唯一。

这是我正在使用的示例(不需要Translit任何东西)

module Formtastic
  module Inputs
    module Base
      module Choices

        def choice_html_safe_value(choice)
          choice_value(choice).hash
        end

      end # Choices
    end
  end
end

答案 1 :(得分:1)

如果仅在创建复选框和单选按钮时出现问题,请在创建id的属性inputfor的属性label时,尝试破解形式,将字符从cyrrilic转换为latin }。

module Formtastic
  module Inputs
    module Base
      module Choices

        def choice_html_safe_value(choice)
          name = Translit.convert(choice_value(choice).to_s, :english)
          name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase
        end

      end # Choices
    end
  end
end

你可以使用gem translit或自己做转换。在黑客攻击之后,formtastic会产生这样的东西:

<div class="radio">
  <label class="choice" for="post_flat_building_type_kirpichnyj">
    <input id="post_flat_building_type_kirpichnyj" name="post_flat[building_type]" type="radio" value="кирпичный">
    кирпичный
  </label>
</div>

答案 2 :(得分:0)

使用简单数组,而不是数组数组

[ "Flat-super", "Flat-super" ]