「必須」属性を追加するとき
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要素をパーティーに追加するのは好きではありません。
どうすればこれを防ぐことができますか?
Config/initializers/simple_form.rbに次の行を追加します。
config.label_text = lambda { |label, required| "#{label}" }
Simple_formのロケールファイルで必要なマークを空の値に設定するだけです。
en:
simple_form:
required:
text: 'required'
mark: '*'
または、CSSを使用して非表示にします。
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を使用しますが、すべてを変更する時間があると思う場合は、それを選択してください。
最も簡単な方法は、このcssで非表示にすることです。
abbr[title="required"] {
display: none;
}
Railsではありません。 simple_form gemです。したがって、すべてのラッピング要素が必要ない場合は、simple_formを使用しないでください。 Rails form helpers を使用します。好きではないものをカスタマイズするよりも簡単です。
アスタリスクの問題の解決に役立ったコード:
abbr[title="required"] {
display: none;
}
選択された答えと、ロケールファイルdintのHTMLを変更するように求める他の提案は、最新のSimple_form gemの助けになります。
Formtasticを使用していてこの問題が発生している場合は、構成ファイル(通常はapp/config/initializers/formtastic.rbを編集してアスタリスクを削除できます。 。
次の行を変更します:# Formtastic::SemanticFormBuilder.required_string = "(required)"
することが: Formtastic::SemanticFormBuilder.required_string = ""
詳細 こちら 。
受け入れられた回答で提案されているグローバル構成とは別に、required: false
入力オプションとして、またはdefaults: { required: false }
は、フォーム全体に設定します。
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
を使用した場合、すべての必須フィールドの後にアスタリスクを付けます
背後にあるアスタリスク(*)のみを削除したい場合は、このファイルに移動するだけでよいことがわかりましたfile /config/locales/simple_form.en.yml
繰り返しますが、gemsの構成ファイルや何らかの理由で使用しているものを変更することはお勧めできません。常にsimple_formを本当に使用する理由は疑問です。
しかし、たとえば、simple_formには素晴らしいものがあるのに、最近では必須フィールドではなく必須フィールドにアスタリスクを付ける方が使い勝手が良いことを知りました。
フォーム全体から削除できます:
<%= simple_form_for @form, defaults: { required: false } do |f| %>