Rails: jak wyłączyć gwiazdkę w polach wymaganych w formularzu?

Kiedy dodam atrybut 'Required'
do pól wejściowych html, Rails umieszcza przed etykietą gwiazdkę ( * ).

Czy ktoś wie jak temu zapobiec?

Z jakiegoś powodu Rails przekształca to:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name" %>

Do tego:

<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>
Nie podoba mi się, że zawija wszystko w DIV I dodaje element ABBR do strony. Jak mogę temu zapobiec?
Author: vsync, 2011-10-04

11 answers

W config/initializers / simple_form.rb dodaj ten wiersz:

config.label_text = lambda { |label, required| "#{label}" }
 34
Author: Shane Andrade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-02 19:03:26

Możesz po prostu ustawić wymagany znak na empty value w pliku locale simple_form:

en:
  simple_form:
    required:
      text: 'required'
      mark: '*'

Lub użyj CSS, aby go ukryć.

 48
Author: RocketR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-05 11:46:13

Używam Rails 3.1 i mam następujący kod widoku w moim _form.html.erb dla danego modelu:

<div>
  <%= f.label :full_name %><br/>
  <%= f.text_field :full_name, :required => true %><br/>
</div>

Etykieta nie pokazuje gwiazdki, jeśli robisz to w ten sposób. Chyba, że kod pocztowy nie mogę być pewien, jakie jest twoje podejście i czy moje rozwiązanie pasuje do tego podejścia.

Zaktualizowana Odpowiedź: Wygląda na to, że odziedziczyłeś ten kod po kimś. W każdym razie, po przeczytaniu próbki kodu, zdecydowanie używasz klejnotu simple_form. Informacje o tym klejnocie mogą znajdziesz tutaj https://github.com/plataformatec/simple_form . aby odpowiedzieć na twoje pytanie, jeśli zmienisz kod:

<%= f.input :Company, :input_html => {:value => "", :id => "company_name"}, :label => "company name", :required => false %>
To powinno wyłączyć gwiazdkę.

Dodam, że bazując na Twoim obrzydzeniu dla HTML wygenerowanego z simple_form, wydaje się, że powinieneś po prostu pozbyć się klejnotu i ponownie napisać kod formularza za pomocą domyślnych helperów formularza Rails, o których możesz przeczytać tutaj http://guides.rubyonrails.org/form_helpers.html . W zależności od wielkości bazy kodu, może być lepiej po prostu ssać go i uczyć się, jak korzystać z klejnotu simple_form ze względu na oszczędność czasu, ale jeśli uważasz, że masz czas, aby to wszystko zmienić, idź do niego.

 21
Author: Lester Peabody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-05 16:39:26

Najprostszym sposobem jest ukrycie go za pomocą tego css:

abbr[title="required"] {
  display: none;
}
 15
Author: VoA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-03 21:00:00

To wcale nie rails. To simple_form gem. Tak więc, jeśli nie chcesz, aby wszystkie elementy zawijania nie używały simple_form. Użyj rails form helpers . Byłoby to prostsze niż dostosowanie czegoś, co ci się nie podoba.

 5
Author: lucapette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-05 11:39:59

Dla każdego, kto używa Formtastic i ma ten problem, możesz usunąć gwiazdki, edytując plik konfiguracyjny, który jest zazwyczaj app/config/initializers/formtastic.rb .

Zmień tę linię: # Formtastic::SemanticFormBuilder.required_string = "(required)"

Być: Formtastic::SemanticFormBuilder.required_string = ""

Więcej informacji tutaj .

 4
Author: Aaron Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 20:05:51

Kod, który pomógł mi rozwiązać problem z gwiazdką:

abbr[title="required"] {
  display: none;
}

Wybrana odpowiedź i inne sugestie proszące o zmianę HTML w pliku locales pomagają mi w najnowszym klejnocie Simple_form.

 3
Author: Cybergenie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 10:50:34

Oprócz globalnej konfiguracji sugerowanej w zaakceptowanej odpowiedzi, możesz podać required: false jako opcję wprowadzania lub defaults: { required: false }, aby ustawić ją dla całego formularza.

 2
Author: inopinatus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 00:14:01

Możesz go usunąć z całego formularza:

<%= simple_form_for @form, defaults: { required: false } do |f| %>
 2
Author: FrankfromDenmark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-18 18:12:48

Dowiedziałem się, że jeśli chcesz usunąć tylko gwiazdkę (*) za nią, to wszystko, co musisz zrobić, to przejść do tego pliku file /config/locales/simple_form.en.yml

Po raz kolejny nie jest dobrą praktyką zmienianie plików konfiguracyjnych dla klejnotów i czegoś, czego używasz z jakiegoś powodu, zawsze pojawia się pytanie, dlaczego naprawdę używasz simple_form!

Ale na przykład dowiedziałem się o tym, ponieważ jest wiele wspaniałych rzeczy o simple_form używamy, ale obecnie jest lepszą praktyką użyteczności, aby mieć gwiazdki na none required fields then required ones.

 0
Author: andre.orvalho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-18 09:25:53

Możesz użyć metody form_for i nadpisać metodę def label w config/initializer, aby dodać gwiazdkę do pól obowiązkowych w następujący sposób:

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

Ta metoda umieszcza gwiazdkę po wszystkich polach obowiązkowych, jeśli użyłeś normalnego form_for, A użyłeś validates_presence_of

 0
Author: Mohamed Yakout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-11 08:59:34