문제

사용자 선호도를 용이하게하는 메커니즘을 찾고 있습니다. 또한 현재 로그인 한 사용자에게 특정 Pref 세트가없는 경우 사용되는 "마스터"프리프 세트를 원합니다. 나는 이와 비슷한 몇 가지 질문을 보았지만 단순히 품질 솔루션을 제안하는 대신 이론에 들어가는 것 같습니다.

기본적으로 저는 스토리지와 (모델, 컨트롤러 등) 관리에 대한 입력을 찾고 있습니다. 처음에는 단순히 50 개 이상의 열이라는 표준화 된 테이블 (성능 등)을 사용하는 것을 고려하고있었습니다. 그러나 미래에 다양한 알려지지 않은 선호도를 추가 할 계획이며 성능을 따로 여러 열이 나오는 것을 상상할 수 있습니다. 생각?

도움이 되었습니까?

해결책

제 생각에는 기본값을 정의하고 사용하는 가장 좋은 방법은 사용자 기본 설정 테이블에 다른 행을 추가하고 모델에서 클래스 변수로로드하는 것입니다. 그런 다음 접근자를 무시하여 선호도가 발견되지 않은 경우 기본값을 찾으십시오. 이 같은:

class UserPreference < ActiveRecord::Base
  # load default preferences as a class variable
  @@defaults ||= find(1).attributes

  # redefine accessors or each column to load default if nil
  column_names.each do |column|
    method_name = "#{column}_with_default".to_sym
    send :define_method, method_name do 
      value = send("#{column_without_default}") 
      case value
      when nil
        @@defaults[column]
      else 
        value
      end
    end
    alias_method_chain column, :default
  end
  ...
end

기본적으로 기본 환경 설정 (1 행에서로드)은 모델에 클래스 변수로 저장됩니다. 모든 액세서가 재정의되고 별명 메소드 체인의 일부가되므로 반환 된 값이 NIL 인 경우 기본값이 반환됩니다. 사용하고 싶었습니다 || 케이스 대신 대신 사용자가 부울 선호도를 거짓으로 설정 한 경우 문제가 발생합니다.

편집 : NB 서버를 다시 시작하지 않고도 레일 앱에서 기본값을 업데이트하는 좋은 방법을 모릅니다.

다른 팁

데이터베이스에서 개별 환경 설정을 통해 조작하거나 정렬 할 필요가 없으면 단일 비트 마스크 (정수) 열을 사용할 수 있습니다. 기본적으로 비트 마스크는 이진 번호로 표시되는 켜기/오프 스위치 세트입니다. 예를 들어, 세 가지 선호도가 있다고 가정 해 봅시다.

  1. 구독을 봅니다
  2. 색상을보십시오
  3. 전체 이름을 봅니다

사용자가 1 ~ 3 on 및 2 꺼짐을 가지고 있다고 가정 해 봅시다. ON 1S, OFF의 경우 0S를 사용하면 다음과 같은 비트 마스크는 다음과 같습니다.

101

(On On On)

이것은 데이터베이스에 저장됩니다 5 왜냐하면 101 이진에서 5입니다. 비트 마스크는 데이터베이스에 쉽게 저장할 수 있으며 (단일 정수 열을 사용) 운영자를 알면 쉽게 조작 할 수 있습니다 (사용자 기본 설정을 사이트 기본값으로 병합하기 위해). Ryan Bates는 레일에서 비트 마스크를 사용하는 것에 대한 훌륭한 자습서를 가지고 있습니다. Emmbedded Association. 바라건대 그것은 당신이 찾고있는 구체적인 예를 제공 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top