2013-04-02 5 views
1

모든 사용자가받을 이메일의 종류를 결정할 수있는 기능을 구현하고 싶습니다. 지금까지 우정 요청을 받았을 때와 새로운 메시지를 받으면 이메일을받는 사용자 만 볼 수 있습니다. 나는 다음과 같이이 구현할 계획 방법 : 친구 (부울) 및 메시지 (부울) :사용자 이메일 환경 설정을 구현하는 방법은 무엇입니까?

  1. 각 사용자 has_one EmailPreference
  2. EmailPreferences 테이블이 개 컬럼이있을 것이다.
  3. 기본적으로 true입니다. 따라서 사용자는 새 메시지와 수신 된 새 요청에 대한 전자 메일을 받게됩니다.
  4. 사용자는 편집 작업으로 이동하여 원하는대로 값을 업데이트 할 수 있습니다.
  5. if statement을 사용하여 보낼 이메일 방법 전에 @user.emailpreference.message? 또는 @user.emailpreference.friendship?이 있는지 확인합니다.

이것이 최선의 방법인지 알고 싶습니다.

+1

요구 사항을 충족합니까? –

+0

그것이 작동하는지 또는 더 간단한 방법이 있는지 확실하지 않습니다. – pratski

답변

3

몇 가지 고려 사항 - 사용자가 has_one을 수행 할 것인지 아니면 단순히 열을 사용자에게 추가 할 것인지를 묻습니다. 또한 boolean 대신 날짜를 사용하는 경향이 있으므로 boolean이 설정되었을 때 확인할 수 있습니다. 이름을 붙이려면 '우정'과 '메시지'이외의 것을 고려하십시오. 그것이 사용자의 속성이라면 'subscribed_to_friendships'및 'subscribed_to_messages'와 같은 것을 고려할 것입니다.

일반적으로 has_one을 피하는 이유는 매우 간단한 쿼리를 작성하고 유지 관리의 필요성을 줄이는 것입니다. 메시지를 받고 반복해야하는 모든 사용자를 얻게 될 가능성이 높습니다. 조인을 피하고 간단하게 유지하는 것이 좋습니다. 나는 또한 거짓과 null이 아이에게 얼마나 똑같은지 정말 좋아하지 않습니다. 이렇게하면 기본 설정이 true이고 기본적으로 대부분의 사용자에 대한 환경 설정을 만드는 경우 환경 설정 레코드를 삭제/추가하지 않아도됩니다.

1

내가 접근법에서 한 가지 문제는 내일 당신이 선호도로 더 많은 유형을 가지고 있다면, 누군가가 조인 할 때 전자 메일을 보내려는 것보다 더 많은 것을 의미한다는 것입니다.이 경우에는 하나 이상의 열을 추가해야합니다. 당신이 그것을 더 정상화와 기본 설정 유형

   Id Name 
      1 Friendship 
      2 Message 

      Id User Id Flag 
      1  1  TRUE 
      2  1  False 

을 저장하기 위해 더 많은 표를 사용하지 않는 이유는 사용자 1이 메시지에 대한 우정에 대한 거부가 아니라 의미합니다. 이제 새로운 환경 설정을 쉽게 추가 할 수 있습니다.

관련 문제