복붙노트

[RUBY-ON-RAILS] 어떻게 레일 편집 필드에 표시된 값을 포맷 할 수 있습니다?

RUBY-ON-RAILS

어떻게 레일 편집 필드에 표시된 값을 포맷 할 수 있습니다?

나는 사용자 친화적 가능한 한 편집 양식 필드를하고 싶습니다. 예를 들어, 숫자 값, 나는 (number_with_precision 같은) 쉼표로 표시 할 필드 싶습니다.

이것은 쉬운 디스플레이 측에 충분한,하지만 편집에 대해입니까? 이 작업을 수행 할 수있는 좋은 방법이 있나요?

나는 레일 FormBuilder을 사용하고 있습니다. 조사 결과, 나는 그것이 <속성>을 오버라이드 (override) <속성> _value_before_type_cast 수단을 사용하여 필드의 값을 얻을 수 InstanceTag을 사용하는 것을 발견 전화를받을 수 없습니다.

해결법

  1. ==============================

    1.내가 지금까지 함께 온 가장 좋은이 같은 것입니다 :

    내가 지금까지 함께 온 가장 좋은이 같은 것입니다 :

    <%= f.text_field :my_attribute, :value => number_with_precision(f.object.my_attribute) %>
    

    또는 my_attribute이 같은 형식의 값을 반환 할 수 있습니다 :

    def my_attribute
      ApplicationController.helpers.number_with_precision(read_attribute(:my_attribute))
    end
    

    그러나 당신은 여전히 ​​사용이 : 값을

    <%= f.text_field :my_attribute, :value => f.object.my_attribute %>
    

    이것은 많은 작업처럼 보인다.

  2. ==============================

    2.내가보기에 수행 된 서식 존재로, 첫 번째 대답을 선호한다. 당신이 모델에 서식을 수행 할 경우, 당신은 getter와 setter에 대한 래퍼 방법을 사용하고, 사용하지 않도록 할 수 있습니다 완전히 값 옵션을 선택합니다.

    내가보기에 수행 된 서식 존재로, 첫 번째 대답을 선호한다. 당신이 모델에 서식을 수행 할 경우, 당신은 getter와 setter에 대한 래퍼 방법을 사용하고, 사용하지 않도록 할 수 있습니다 완전히 값 옵션을 선택합니다.

    이 같은 끝낼 것입니다.

    def my_attribute_string
      foo_formatter(myattribute)
    end
    
    def my_attribute_string=(s)
      # Parse "s" or do whatever you need to with it, then set your real attribute.
    end
    
    <%= f.text_field :my_attribute_string %>
    

    Railscasts는 에피소드 # 32에 text_field의 시간 객체와이 덮여. 이것의 정말 영리한 부분은 유효성 검사 오류를 처리하는 방법입니다. 혼자의 에피소드를보고 그것의 가치.

  3. ==============================

    3.이것은 오래된 질문이지만,이 당신이 number_to_X 헬퍼를 사용할 수에 걸쳐 경우에 사람이 온다. 그들은 당신이 이제까지 당신의 편집 값을 표시 할 수있는 모든 속성을 가지고 :

    이것은 오래된 질문이지만,이 당신이 number_to_X 헬퍼를 사용할 수에 걸쳐 경우에 사람이 온다. 그들은 당신이 이제까지 당신의 편집 값을 표시 할 수있는 모든 속성을 가지고 :

    <%= f.text_field :my_number, :value => number_to_human(f.object.my_number, :separator => '', :unit => '', :delimiter => '', :precision => 0) %>
    

    사용할 수 이상의 속성도 있습니다 http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

  4. ==============================

    4.당신이 형식을 만들거나 편집하는 동안 유지하려는 경우, 당신은 구현하는 자바 스크립트를 추가해야합니다 "마스크를." 여기 데모입니다.

    당신이 형식을 만들거나 편집하는 동안 유지하려는 경우, 당신은 구현하는 자바 스크립트를 추가해야합니다 "마스크를." 여기 데모입니다.

    그것은 이러한 결과의 첫 번째 히트했다.

  5. ==============================

    5.당신은로 number_format 플러그인을 사용할 수 있습니다. 모델 내부에 기존의 숫자 속성에 대한로 number_format을 지정하여 속성은 이제 모든 양식과보기에 레일에 서식이 나타납니다. 또한, 데이터베이스에 삽입 이전 (형태로 지정)이 포맷에서 파싱 돌아갈 것이다. (플러그인은 순전히 숫자 unformatted_ <속성 이름> 원활한 통합을 위해 당신에 의해 직접 수치 할당 또는 검색을 위해 연산에 사용되는 계속하거나 수있는 접근을 만듭니다.)

    당신은로 number_format 플러그인을 사용할 수 있습니다. 모델 내부에 기존의 숫자 속성에 대한로 number_format을 지정하여 속성은 이제 모든 양식과보기에 레일에 서식이 나타납니다. 또한, 데이터베이스에 삽입 이전 (형태로 지정)이 포맷에서 파싱 돌아갈 것이다. (플러그인은 순전히 숫자 unformatted_ <속성 이름> 원활한 통합을 위해 당신에 의해 직접 수치 할당 또는 검색을 위해 연산에 사용되는 계속하거나 수있는 접근을 만듭니다.)

    class MyModel < ActiveRecord::Base
      # this model has the balance attribute, which we
      #  want to display using formatting in views,
      #  although it is stored as a numeric in the database
      number_format :balance, 
                    :precision => 2,
                    :delimiter => ',',
                    :strip_trailing_zeros => false
    
      def increment_balance
        unformatted_balance += 10
      end
    

    이 정말 필요하지 않습니다하지만 당신은 또한, 편집하는 동안 자리에 소수점 및 천 단위 구분을 유지하기 위해 사용자를 강제 할 수있는 자바 스크립트 솔루션과 위를 결합 할 수 있습니다.

  6. ==============================

    6.나는 비슷한 일을했다. 우리는 시간과 사용자 지정 양식 빌더를 사용하여 길이를 포맷합니다. 그것은 기존의 text_field을 사용한다, 값이 사용자 정의 할 수 있도록 랩 :

    나는 비슷한 일을했다. 우리는 시간과 사용자 지정 양식 빌더를 사용하여 길이를 포맷합니다. 그것은 기존의 text_field을 사용한다, 값이 사용자 정의 할 수 있도록 랩 :

    class SuperFormBuilder < ActionView::Helpers::FormBuilder
      include ApplicationHelper
      include FormHelper
      include ActionView::Helpers::TagHelper
      include ActionView::Helpers::FormTagHelper
    
      def length_field(label,*args)
        scale = 'medium'
        args.each do |v|
          if v.has_key?(:scale)
            scale = v[:scale]
            v.delete(:scale)
          end
        end
      value = length_conversion(@object.send(label.to_sym),scale)
      options = (args.length > 0) ? args.pop : {}
      return has_error(label, text_field_tag(field_name(label),value,*args) + ' ' +  length_unit(scale))
    end
    
    private
    def field_name(label)
      return @object_name + "[#{label}]"
    end
    
    def has_error(label, output)
      return    "<div class='fieldWithErrors'>#{output}</div>" if @object.errors[label]
      return output
    end
    

    그리고는 다음과 같이 사용된다 :

    <%= form_for( @section, {:action => 'save', :id => @section.id}, :builder => SuperFormBuilder) do |sf| %> 
       <%= sf.length_field :feed_size_min_w, :size => 3, :scale => 'small'  %>
    <% end %>
    

    최종 결과는 시스템 선택 (미터 제국)과 스케일 IE 작은 = 인치 또는 mm 기반으로 해당 단위의 값이다.

    나는 기본적으로 text_field_tag ​​자체를 사용하는 기존 양식 빌더에서 text_field 방법을 복사.

    1) 객체 필드와 어떻게 형식으로 원하는 값을 얻을 수있는 개체에 액세스하는 방법의 이름을 알고 두 개는있다. 2) 바로 그래서 폼이 제출 될 때 이름을 얻기는 올바른 PARAMS 해시의 일부입니다.

    양식 빌더는 클래스 변수 @object 주어집니다. 당신은 .send 방법을 사용하여 필드의 값을 얻을 수 있습니다. @object에 feed_size_min_w를 그 길이 다시 얻을 : 내 경우에는 내가 레이블을 보낼 수 있습니다. 그때 나는 내 원하는 형식으로 변환하고, text_field_tag에 제공합니다.

    [: 섹션] 하나 필드의 이름은 내 경우에, 그것은 PARAMS 해시에서 끝나는 PARAMS을 가진 핵심입니다. 나는이 돌봐 작은 도우미 함수라는 FIELD_NAME했다.

    이 라벨에 오류가있는 경우 마지막으로 has_error 오류 사업부의 필드를 랩합니다.

  7. from https://stackoverflow.com/questions/591939/how-can-i-format-the-value-shown-in-a-rails-edit-field by cc-by-sa and MIT license