1

Rails에서 데이터베이스 데이터에 대한 질문이 있습니다.Rails 3.2의 빈 테이블 열에 대한 모범 사례

빈 테이블 열의 모범 사례는 무엇입니까?

예를 들어 사용자 입력에 필수가 아닌 일부 열에는 기본값이 없습니다.

User model 
ID | name  | drink_of_choice | favourite_color 
----------------------------------------------------- 
1 | Benji  | coffee   | yellow 
2 | Becky  | tea    | NULL 
----------------------------------------------------- 

Becky가 선호하는 색을 아직 입력하지 않았기 때문에 Becky의 favouritte_color가 NULL임을 알 수 있습니다.

Do Rails 개발자는 빈 문자열을 저장하고 데이터베이스에 NULL을 사용하지 않는 것이 좋습니다 (기본값 => '')?

양해 해 주셔서 감사 드리며 학습에 대한 조언을 주시면 감사하겠습니다.

당신을 위해 작동하는 경우 WD

답변

3

당신은 ... 많은 옵션을 가지고

1- 첫 번째는 사용자가 일부 데이터를 입력하도록하는 것입니다. 그래서, 당신은 validation of presence를 사용할 수 있습니다

class User < ActiveRecord::Base 
    validates :name, :drink_of_choice, :favourite_color, :presence => true 
    ... 
end 

2 단, 사용자가 빈 일부 열을 떠날 수 있도록 할 수 있습니다. 그렇다면, 당신은 예를 들어, 모델에 대한 기본 값을 설정할 수 있습니다

class User < ActiveRecord::Base 
    before_save :set_favourite_color 
    ... 
    def set_favourite_color 
    self.favourite_color ||= '' 
    end 
end 

3 당신은 또한 당신의 컨트롤러를 설정할 수 있습니다, 같은 :

def new 
    @user = User.new 
    @user.favourite_color ||= '' 
    ... 
end 

4 - 또 다른 옵션 하지만 정말, (안 유연한 전혀) 그것을 좋아하지 않아 마이그레이션 파일에 정의되어

class CreateUser < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     ... 
     t.string :favourite_color, default: '' 
     ... 
     t.timestamps 
    end 
    end 
end 

이 가장 좋은 방법은 무엇입니까?

레일 모범 사례에 따르면 더 정확하게는 Fat Model, Skinny Controller입니다. 옵션 2를 선택합니다.

EDIT - 열의 기본값을 결정하기 전에이 열의 의미를 생각해보십시오. 의미가 입력 된 데이터가 없다면, 당신은 null로 두어야한다고 생각합니다. Daniel Rikowski 님의 댓글에 감사드립니다. in this question을보세요. 레일 뷰에

+2

+1 귀하의 전반적인 의견 ("많은 옵션")에 동의하지만 '빈칸'이라는 글자를 쓰는 것은 좋은 생각이 아닙니다.빈/unset/unitialized 필드를 나타내는 것은 정확히 NULL 값의 목적입니다. 또한 대리 값이 뷰에 속한다고 주장 할 수 있습니다. 예를 들어'<% = user.favourite_color || "비어있는". 비슷한 제안에 대한이 질문과 답변을 참조하십시오 : http://stackoverflow.com/questions/6638291/standard-use-of-z-instead-of-null-to-represent-missing-data –

+0

링크에 대한 감사. .. 나는 그것에 대해 정말로 생각해 본 적이 없습니다 ... – gabrielhilal

+0

Gabriel과 Daniel이 통찰력을 얻고 데이터의 옵션과 의미에 대해 생각하게 해주셔서 감사드립니다. 데이터가 필수적이지 않기 때문에보기 옵션을 선택했습니다. 도와 줘서 고마워. 다시 고마워. –

0

, 내가 이런 걸 사용

<%= input unless input.blank? %> 

을 그리고 DB에 그대로 데이터를 둡니다.