Чтобы установить класс для input
и label
, используйте input_html
и label_html
:
<%= f.input :role, :wrapper => :horizontal_range, input_html: { class: "col-md-4"}, label_html: {class: "col-md-8"} %>
Что касается второго вопроса - если вы не используете подсказки, возможно, самое простое решение было бы сделать это так:
<%= f.input :pct_of_car , hint: "%", :wrapper =>:horizontal_range %>
Затем вы можете стилизовать его, добавив пользовательский класс в подсказку с опцией hint_html
(аналогично input_html
и label_html
). [1115 ]
Лучшим решением для добавления пользовательского текста является использование блока для ввода:
<%= f.input(:role, :wrapper => :horizontal_range, label_html: {class: "col-md-8"}) do %>
<div class='col-md-4'>
<%= f.input(:role, components: [:input], :wrapper => false, label: false) %>
<span>%</span>
</div>
<% end %>
Благодаря этому у вашего ярлыка есть класс col-md-8
, и ввод с вашим текст заключен в div с классом col-md-4
.
Я предпочитаю использовать send для вызова define_method, и мне также нравится создавать метод метакласса для доступа к метаклассу:
class Object
def metaclass
class << self
self
end
end
end
class MyClass
# Defines MyClass.my_method
self.metaclass.send(:define_method, :my_method) do
...
end
end
Получено из: Jay и Почему , которые также предоставляют способы сделать это красивее.
self.create_class_method(method_name)
(class << self; self; end).instance_eval do
define_method method_name do
...
end
end
end
Обновление : из вклада VR ниже; более краткий метод (если только вы так определяете один метод), который все еще автономен:
self.create_class_method(method_name)
(class << self; self; end).send(:define_method, method_name) do
...
end
end
, но учтите, что использование send () для доступа к закрытым методам, таким как define_method (), не обязательно является хорошей идеей (мое понимание в том, что он уходит в Ruby 1.9).