Open shaynekang opened 10 years ago
레일즈 모델에는 attributes라는 메소드가 있습니다. 현재 모델 인스턴스에서 가지고 있는 컬럼과 그 값을 반환하는 역할을 합니다
attributes
irb(main):074:0> user = User.new => #<User id: nil, email: nil, created_at: nil, updated_at: nil, username: nil, phone_number: nil, major: nil, student_id: nil, sex: nil, home_phone_number: nil, emergency_phone_number: nil, habitat_id: nil, member_type: nil, generation_id: nil, birth: nil> irb(main):075:0> user.email = "test@example.com" => "test@example.com" irb(main):076:0> user.username = "test" => "test" irb(main):077:0> user.attributes => {"id"=>nil, "email"=>"test@example.com", "created_at"=>nil, "updated_at"=>nil, "username"=>"test", "phone_number"=>nil, "major"=>nil, "student_id"=>nil, "sex"=>nil, "home_phone_number"=>nil, "emergency_phone_number"=>nil, "habitat_id"=>nil, "member_type"=>nil, "generation_id"=>nil, "birth"=>nil}
또한 해시에는 keys라는 메소드와 values라는 메소드가 있습니다. 각각 해시의 키와 값을 반환합니다.
keys
values
irb(main):078:0> user.attributes.keys => ["id", "email", "created_at", "updated_at", "username", "phone_number", "major", "student_id", "sex", "home_phone_number", "emergency_phone_number", "habitat_id", "member_type", "generation_id", "birth"] irb(main):079:0> user.attributes.values => [nil, "test@example.com", nil, nil, "test", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
이를 활용하면 레일즈 코드를 좀 더 간결하게 고칠 수 있습니다. 가령 현재 사용자(User) 모델에 다음과 같은 코드가 있는데,
def strip! strip_to = [:username, :email, :major, :student_id, :sex, :home_phone_number, :emergency_phone_number, :habitat_id, :member_type, :birth ] strip_to.each{|column| self[column].strip! if self[column]} end
이를 다음과 같이 고칠 수 있습니다.
def strip! self.tap do attributes.values.each do |value| value.strip! if value end end end
이 코드는
strip!
다른 코드도 attributes와 keys/values를 활용해서 리펙토링 하면 좋겠습니다. ㅎㅎ
유용하게 쓰일것같네요 :+1:
레일즈 모델에는
attributes
라는 메소드가 있습니다. 현재 모델 인스턴스에서 가지고 있는 컬럼과 그 값을 반환하는 역할을 합니다또한 해시에는
keys
라는 메소드와values
라는 메소드가 있습니다. 각각 해시의 키와 값을 반환합니다.이를 활용하면 레일즈 코드를 좀 더 간결하게 고칠 수 있습니다. 가령 현재 사용자(User) 모델에 다음과 같은 코드가 있는데,
이를 다음과 같이 고칠 수 있습니다.
이 코드는
strip!
을 해줍니다.다른 코드도
attributes
와keys
/values
를 활용해서 리펙토링 하면 좋겠습니다. ㅎㅎ