web-dev-qa-db-ja.com

Rails:フォームの必須フィールドでアスタリスクを無効にする方法は?

「必須」属性を追加するとき
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要素をパーティーに追加するのは好きではありません。

どうすればこれを防ぐことができますか?

37
vsync

Config/initializers/simple_form.rbに次の行を追加します。

config.label_text = lambda { |label, required| "#{label}" }
33
Shane Andrade

Simple_formのロケールファイルで必要なマークを空の値に設定するだけです。

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

または、CSSを使用して非表示にします。

47
RocketR

Rails 3.1を使用しています。特定のモデルの_form.html.erbに次のビューコードがあります。

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

この方法で行うと、ラベルにはアスタリスクが表示されません。コードを投稿しない限り、あなたのアプローチが何であるか、そして私のソリューションがそのアプローチに適合するかどうかはわかりません。

更新された回答:このコードを誰かから継承したようです。とにかく、コードサンプルを読んだ後は、間違いなくsimple_form gemを使用しています。そのgemに関する情報は、ここで見つけることができます https://github.com/plataformatec/simple_form 。ただし、コードに変更を加えた場合、次のように質問に答えてください。

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

これにより、アスタリスクがオフになります。

Simple_formから生成されたHTMLに対する嫌悪感に基づいて、gemを廃止し、Rails default form helpersを使用してフォームコードを書き直す必要があるように聞こえますここで読むことができます http://guides.rubyonrails.org/form_helpers.html 。コードベースのサイズに応じて、それを吸い上げて使用方法を学ぶ方が良いかもしれません時間を節約するためにsimple_form gemを使用しますが、すべてを変更する時間があると思う場合は、それを選択してください。

21
Lester Peabody

最も簡単な方法は、このcssで非表示にすることです。

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

Railsではありません。 simple_form gemです。したがって、すべてのラッピング要素が必要ない場合は、simple_formを使用しないでください。 Rails form helpers を使用します。好きではないものをカスタマイズするよりも簡単です。

5
lucapette

アスタリスクの問題の解決に役立ったコード:

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

選択された答えと、ロケールファイルdintのHTMLを変更するように求める他の提案は、最新のSimple_form gemの助けになります。

3
Cybergenie

Formtasticを使用していてこの問題が発生している場合は、構成ファイル(通常はapp/config/initializers/formtastic.rbを編集してアスタリスクを削除できます。 。

次の行を変更します:# Formtastic::SemanticFormBuilder.required_string = "(required)"

することが: Formtastic::SemanticFormBuilder.required_string = ""

詳細 こちら

3
Aaron Gray

受け入れられた回答で提案されているグローバル構成とは別に、required: false入力オプションとして、またはdefaults: { required: false }は、フォーム全体に設定します。

2
inopinatus

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を使用した場合、すべての必須フィールドの後にアスタリスクを付けます

0
Mohamed Yakout

背後にあるアスタリスク(*)のみを削除したい場合は、このファイルに移動するだけでよいことがわかりましたfile /config/locales/simple_form.en.yml

繰り返しますが、gemsの構成ファイルや何らかの理由で使用しているものを変更することはお勧めできません。常にsimple_formを本当に使用する理由は疑問です。

しかし、たとえば、simple_formには素晴らしいものがあるのに、最近では必須フィールドではなく必須フィールドにアスタリスクを付ける方が使い勝手が良いことを知りました。

0
andre.orvalho

フォーム全体から削除できます:

<%= simple_form_for @form, defaults: { required: false } do |f| %>
0