问题
When I add the 'Required' attribute
to html input fields, Rails pre-pends an asterisk (*) before the label.
Does anyone know how to prevent this?
For some reason Rails transforms this:
<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name" %>
into this:
<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>
I don't like that it wraps everything in a DIV and adds an ABBR element to the party.
How can I prevent this?
回答1:
In config/initializers/simple_form.rb add this line:
config.label_text = lambda { |label, required| "#{label}" }
回答2:
You can just set the required mark to empty value in simple_form's locale file:
en:
simple_form:
required:
text: 'required'
mark: '*'
Or use CSS to hide it.
回答3:
I'm using Rails 3.1, and I have the following view code in my _form.html.erb for a given model:
<div>
<%= f.label :full_name %><br/>
<%= f.text_field :full_name, :required => true %><br/>
</div>
The label does not show an asterisk if you do it this way. Unless you post code I can't be sure of what your approach is and if my solution would fit said approach.
Updated Answer: It sounds like you've inherited this code from someone. At any rate, after reading your code sample, you are most definitely using the simple_form gem. Information about that gem can be found here https://github.com/plataformatec/simple_form. To answer your question though, if you change your code the following:
<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name", :required => false %>
That should turn off the asterisk.
I would add, based on your disgust for the HTML generated from simple_form, it sounds like you should just do away with the gem and re-write your form code using the Rails default form helpers, which can be read about here http://guides.rubyonrails.org/form_helpers.html. Depending on the size of the code base, you might be better off just sucking it up and learning how to use the simple_form gem for the sake of saving time, but if you think you have the time to change it all, go for it.
回答4:
The simplest way is to hide it with this css:
abbr[title="required"] {
display: none;
}
回答5:
It isn't rails at all. It's the simple_form gem. So, if you don't want all the wrapping elements don't use simple_form. Use Rails form helpers. It would be more simple than customize something you don't like.
回答6:
For anyone using Formtastic and having this issue, you can remove the asterisks by editing the config file, which is typically app/config/initializers/formtastic.rb.
Change this line: # Formtastic::SemanticFormBuilder.required_string = "(required)"
to be: Formtastic::SemanticFormBuilder.required_string = ""
More info here.
回答7:
Code that has helped me solve the asterisk issue:
abbr[title="required"] {
display: none;
}
The chosen answer and the other suggestions asking to change the HTML in locales file dint help me with the latest Simple_form gem.
回答8:
Aside from the global config suggested in the accepted answer, you can pass required: false as an input option, or defaults: { required: false } to set it for the whole form.
回答9:
You can remove it from the whole form:
<%= simple_form_for @form, defaults: { required: false } do |f| %>
回答10:
I found out that if you only want to remove the asterisk(*) behind it then all you have to do is to go to this file file /config/locales/simple_form.en.yml
once again is not a good practice to change your configuration files for gems and something your using for some reason, it always a question of why do you really use simple_form!
But for example I found out about that because there is great things about simple_form we use but nowadays is a better usability practice to have the asterisks on none required fields then required ones.
回答11:
you can used form_for, and override method def label in config/initializer to add asterisk for mandatory fields as the following:
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
This method puts asterisk after all mandatory fields, if you used normal form_for, and used validates_presence_of
来源:https://stackoverflow.com/questions/7650689/rails-how-to-disable-asterisk-on-forms-required-fields