Ответ 1
В config/initializers/simple_form.rb добавьте эту строку:
config.label_text = lambda { |label, required| "#{label}" }
Когда я добавляю атрибут "Обязательный"
для полей ввода html, Rails предварительно предваряет звездочку (*) перед меткой.
Кто-нибудь знает, как это предотвратить?
По какой-то причине Rails преобразует это:
<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name" %>
в это:
<div class="input string required">
<label for="company_name" class="string required">
<abbr title="required">*</abbr> company name</label>
<input type="text" value="" size="50" required="required" name="lead[Company]" id="company_name" class="string required">
</div>
Мне не нравится, что он обертывает все в DIV и добавляет элемент ABBR стороне.
Как я могу предотвратить это?
В config/initializers/simple_form.rb добавьте эту строку:
config.label_text = lambda { |label, required| "#{label}" }
Вы можете просто установить нужный знак в пустое значение в файле локального файла simple_form:
en:
simple_form:
required:
text: 'required'
mark: '*'
Или используйте CSS, чтобы скрыть его.
Я использую Rails 3.1, и у меня есть следующий код представления в моем _form.html.erb для данной модели:
<div>
<%= f.label :full_name %><br/>
<%= f.text_field :full_name, :required => true %><br/>
</div>
Ярлык не показывает звездочку, если вы сделаете это так. Если вы не отправляете код, я не могу быть уверен в вашем подходе и если мое решение будет соответствовать указанному подходу.
Обновленный ответ: Похоже, вы унаследовали этот код от кого-то. Во всяком случае, прочитав образец кода, вы определенно используете жемчужину simple_form. Информацию об этом драгоценном камне можно найти здесь https://github.com/plataformatec/simple_form. Чтобы ответить на ваш вопрос, если вы измените свой код следующим образом:
<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name", :required => false %>
Это должно отключить звездочку.
Я бы добавил, исходя из вашего отвращения к HTML, сгенерированного из simple_form, похоже, что вам нужно просто покончить с драгоценным камнем и переписать код формы с помощью помощников формы по умолчанию Rails, которые можно прочитать здесь http://guides.rubyonrails.org/form_helpers.html. В зависимости от размера базы кода вам может быть лучше просто всасывать его и научиться использовать жемчужину simple_form для экономии времени, но если вы думаете, что у вас есть время, чтобы все это изменить, пойдите для этого.
Самый простой способ - скрыть это с помощью css:
abbr[title="required"] {
display: none;
}
Это вовсе не рельсы. Это simple_form gem. Итак, если вы не хотите, чтобы все элементы-обтекатели не использовали simple_form. Используйте форму Rails helpers. Это было бы проще, чем настроить что-то, что вам не нравится.
Для тех, кто использует Formtastic и имеет эту проблему, вы можете удалить звездочки, отредактировав файл конфигурации, который обычно app/config/initializers/formtastic.rb.
Измените эту строку: # Formtastic::SemanticFormBuilder.required_string = "(required)"
: Formtastic::SemanticFormBuilder.required_string = ""
Подробнее здесь.
Код, который помог мне решить проблему с звездочкой:
abbr[title="required"] {
display: none;
}
Выбранный ответ и другие предложения, требующие изменить HTML файл в файле locales, помогут мне с последним камнем Simple_form.
Помимо глобальной конфигурации, предложенной в принятом ответе, вы можете передать required: false
в качестве параметра ввода или defaults: { required: false }
, чтобы установить его для всей формы.
Я узнал, что если вы хотите удалить звездочку (*) за ней, вам нужно только пойти в этот файл file /config/locales/simple_form.en.yml
еще раз не очень хорошая практика, чтобы изменить конфигурационные файлы для драгоценных камней и что-то, что вы используете по какой-то причине, всегда возникает вопрос, почему вы действительно используете simple_form!
Но, к примеру, я узнал об этом, потому что есть замечательные вещи о simple_form, которые мы используем, но в настоящее время это лучшая практика юзабилити, чтобы звездочки не добавляли требуемые поля, а затем требуемые.
вы можете использовать form_for
и переопределить метод def label
в config/initializer
, чтобы добавить звездочку для обязательных полей в следующем виде:
def label(object_name, method, content_or_options = nil, options = nil, &block)
if content_or_options.is_a?(Hash)
content_or_options.each do |key, val|
options[key] = val
end
content_or_options = method.to_s
end
content_or_options ||= method.to_s
presence_validations = [ActiveModel::Validations::PresenceValidator, ActiveRecord::Validations::PresenceValidator]
class_obj = options[:object].class if options[:object]
class_obj ||= object_name.to_s.camelize.constantize
validations = class_obj.validators_on(method.to_s).map(&:class)
if (presence_validations.map { |pv| validations.include?(pv) }).any?
content_or_options += "*"
end
Tags::Label.new(object_name, method, self, content_or_options, options).render(&block)
end
Этот метод ставит звездочку после всех обязательных полей, если вы использовали обычный form_for
и использовали validates_presence_of