복붙노트

[RUBY-ON-RAILS] 레일 (루비) : 예 / 아니오 대신 참의 / 거짓

RUBY-ON-RAILS

레일 (루비) : 예 / 아니오 대신 참의 / 거짓

나는 쉽게 기능을 쓸 수 있습니다 알고 응용 프로그램 컨트롤러에 넣어,하지만 난 오히려없는 이미이 작업을 수행합니다 뭔가가있는 경우 것입니다. 기본적으로 내가 좋아하는 뭔가를 갖고 싶어 :

>> boolean_variable?
=> true
>> boolean_variable?.yesno
=> yes
>> boolean_variable?.yesno.capitalize
=> Yes

레일 프레임 워크에서 이미이 같은 뭔가가있다?

해결법

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

    1.이러한 내장 도우미가 존재하지만 하찮게 쉽게 구현하는 방법입니다 :

    이러한 내장 도우미가 존재하지만 하찮게 쉽게 구현하는 방법입니다 :

    class TrueClass
      def yesno
        "Yes"
      end
    end
    
    class FalseClass
      def yesno
        "No"
      end
    end
    
  2. ==============================

    2.레일에 뭔가가 없습니다.

    레일에 뭔가가 없습니다.

    ApplicationHelper에하는 방법을하는 것입니다 비슷한 달성하기 위해 참 / 거짓 클래스에 추가하는 것보다 더 좋은 방법 :

    def human_boolean(boolean)
        boolean ? 'Yes' : 'No'
    end
    

    그런 다음보기

    <%= human_boolean(boolean_youre_checking) %>
    

    클래스에 내장하는 메소드를 추가하는 것은 일반적으로 눈살을 찌푸리게한다. 또한, 레일 '헬퍼 밀접하게이 접근 맞는 원시 좋아한다 ().

    그들은 쉽게 유지 (또는 테스트)하지 않는 한 또 하나의 오프 좋은 생각이 아니다.

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

    3.인간화 부울 : 그 지금은 보석이있다

    인간화 부울 : 그 지금은 보석이있다

    그럼 그냥 할 :

    true.humanize # => "Yes" 
    false.humanize # => "No"
    

    쉽게 en.boolean.yes 및 en.boolean.no 번역 (또는 당신이 좋아하는 어떤 로케일)를 포함하여 반환 된 문자열을 변경할 수 있도록 그것은 또한 국제화를 지원합니다

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

    4.양자 택일로, 당신은 또한 다음과 같은 귀하의 의견 하나 오프를 할 수 :

    양자 택일로, 당신은 또한 다음과 같은 귀하의 의견 하나 오프를 할 수 :

    <%= item.bool_field? ? 'yes' : 'no' %>
    
  5. ==============================

    5.humanize_boolean 보석은 내가 피하기 위해 선호하는 간접적 인 확장이다 TrueClass, FalseClass 및 NilClass을 확장합니다.

    humanize_boolean 보석은 내가 피하기 위해 선호하는 간접적 인 확장이다 TrueClass, FalseClass 및 NilClass을 확장합니다.

    나는 최고 수준의 번역이 도우미는 변화에 친화적 인 절연, 그리고 당신이 그것을 아무것도 truthy 또는 falsey을 제공 할 수 있습니다 발견했습니다 :

    # app/helpers/application_helper.rb
    class ApplicationHelper
      def humanize_boolean(boolean)
        I18n.t((!!boolean).to_s)
      end
    end
    
    # config/locales/en.yml
    en:
      :true: 'Yes'
      :false: 'No'
    

    ! (부울) 이렇게하면 번역 문자열을 만들 때 인수로 전달 된 변수 중 하나 "true"또는 "false"값 보장하지만를 .to_s.

    사용:

    # app/views/chalets/show.html.erb
    <%= humanize_boolean(chalet.rentable?) %>
    
  6. ==============================

    6.나는 이전 답변에서 일반화 된 솔루션을 사랑하지만 당신이 선택적으로 귀하의 의견에 부울의 인간화 버전을 사용하려는 경우, 다음을 수행 할 수 있습니다 :

    나는 이전 답변에서 일반화 된 솔루션을 사랑하지만 당신이 선택적으로 귀하의 의견에 부울의 인간화 버전을 사용하려는 경우, 다음을 수행 할 수 있습니다 :

    나는 도우미 / application_helper.rb에이를 넣어 :

    module ApplicationHelper
    
      def humanize_boolean(value)
        case value
        when true
          "Yes"
        when false
          "No"
        when nil
          "Undefined"
        else
          "Invalid"
        end
      end
    
    end
    

    그런 다음 뷰에서이 예제와 같이 호출 할 수 있습니다 :

    Published: <%= humanize_boolean(post.published) %>
    
  7. from https://stackoverflow.com/questions/3664181/rails-or-ruby-yes-no-instead-of-true-false by cc-by-sa and MIT license