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ę ( * ).
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? 11 answers
W config/initializers / simple_form.rb dodaj ten wiersz:
config.label_text = lambda { |label, required| "#{label}" }
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ć.
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.
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;
}
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.
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 .
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.
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.
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| %>
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.
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
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