1

로 인수를 사용하여 내보기입니다 그래서 데이터베이스를 검사하여 사용자가 이전에 자신의 나이를 표시하도록 선택했는지 확인하고, 그렇다면 확인란이 선택됩니다. 그렇지 않으면 그렇지 않습니다. 현재는 false를 전달하지만, 도우미에서 "@ user.preferences.age_visible"을 작성하면 true를 전달합니다. 그러나 물론 다른 속성에 도우미를 사용할 수 있기를 원합니다.레일 모델 속성 여기

답변

0

Davidb의 대답은 정확하지만 나중에 동적으로 메소드를 호출하려는 경우 send을 사용할 수 있습니다. 예 : 같은 :

@user.preferences.send(:age_visible) 

그냥 약간의 팁 도우미가 더 간결하게 만들려면 :

def checked?(pref) 
    @user.preferences.send(pref) == "1" 
end 
+0

중대한! 빠른 답변 주셔서 감사합니다. 정확히 내가 무엇을 찾고 있었는지. – Lee

+0

@ 실은 사실 Davidb의 답변이 더 좋다고 생각합니다. – Mischa

+0

아래의 답장을 참조하십시오. 각 속성에 별도의 열을 사용하지 않고 OpenStruct를 사용하는 환경 설정 열을 사용합니다. – Lee

1

당신을 :이처럼 도우미를 다시 작성할 수 있도록

@user.preferences.send(pref) == "1" 

이미 부울을 반환 추가 헬퍼가 필요 없다. 데이터베이스에 부울 필드를 만들 때 ActiveRecords는 true 또는 true로 설정되었는지 여부를 쿼리하는 메서드를 제공합니다. 이것을보십시오 :

<%= check_box_tag :age_visible, 1, @user.age_visible? %> 
+0

토글하려는 각 속성에 대해 별도의 열을 만들어야하므로 부울 필드를 사용하지 않습니다. 대신 정보가있는 각 사용자의 환경 설정 열이 있습니다. 테스트 한 결과, @ user.preferences.age_visible == "1"이 뷰에서 작동하지만 도우미는 더 깨끗해 보입니다. – Lee