我有疑问,我如何使标签标题和输入值相同,但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。
答案 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
的属性input
和for
的属性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" ]