Rails: How to disable asterisk on form's required fields?

邮差的信 提交于 2019-11-27 05:35:31

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!