모델 데이타의 검증

IT(Old)/RubyOnRails 2008. 1. 21. 16:50
1. validates_acceptance_of(attribute, :message => "message", :accept => "1")
     => 필드가 HTML폼의 체크박스가 선택되어 있음을 검증
2. validates_associated(object)
3. validates_confirmation_of(attribute, :message => "message")
     => HTML 폼에서 사용자의 실수를 방지하기 위해서 필드값을 중복하여 입력받을 때,
         두 필드의 값이 일치함을 검증
4. validates_each attribute do |record, attr|
      record.errors.add attr, "error_message" if condition
   end
5. validates_exclusion_of(attribute, :in => enumerable_object, :message => "message")
     => 필드값이 지정된 배열 또는 구간의 원소중 하나가 아닐 것을 검증
6. validates_format_of(attribute, :with => /regular_expression/, :message => "message")
     => 필드값의 문자열이 지정된 정규식 패턴과 일치하는지를 검증
7. validates_inclusion_of(attribute, :in => enumerable_object, :message => "message")
     => 필드값이 지정된 배열 또는 구간의 원소중 하나임을 검증
8. validates_length_of(attribute, :maximum => max, :message => "message")
     => 필드값의 문자열 길이가 지정된 범위 내에 있음을 검증
9. validates_numericality_of(value, :message => "message")
     => 필드값이 숫자임을 검증
10. validates_presence_of(attributes, :message => "message")
     => 필드에 값이 지정되지 않았거나, 필드값이 빈 문자열인 경우 에러
11. validates_size_of(attribute, :maximum => max, :message => "message")
12. validates_uniqueness_of(attributes, :message => "message")
     => 필드값이 테이블의 다른 레코드와 중복되지 않음을 검증

 

rails console사용하기 2 (activeRecord의 수정,삭제사용법)

IT(Old)/RubyOnRails 2008. 1. 21. 16:22
1. 수정

간단하다

@user = User.find(1)
@user.password = "aaa"
@user.save

2. 삭제
한개삭제
@user = User.find(3)
@user.destroy

여러개 삭제
@user = User.find(:all, conditions > ["id" >1])
@user.destroy_all

아이디로 삭제
User.delete(3)
User.delete([1, 2, 5])

조건별로 여러개 삭제
User.delete_all(["registered_on = ?", Date.today])

rails console사용하기 1 (activeRecord의 find 사용법)

IT(Old)/RubyOnRails 2008. 1. 21. 16:07
1.시작
ruby script/console
Loading development environment (Rails 2.0.2)
>>

위에서 >> 프롬프트는 루비의 irb프롬프트이다. 여기에서는 단순히 irb유틸리티를 실행한 것이 아니라
레일스 애플리케이션의 콘솔을 시작한 것이기 때문에, 앞에서 정의했던 User모델 클래스를 사용하는 것이
가능하다.

2. Data 입력
>> @user = User.new
=> #<User id: nil, name: nil, login: nil, password: nil, registered_on: nil>
>> @user.name = "jolaking"
=> "jolaking"
>> @user.login = "jola"
=> "jola"
>> @user.password = "jola"
=> "jola"
>> @user.registered_on = Date.today
=> Mon, 21 Jan 2008
>> @user.save
=> true     ==> 저장이 성공되었음을 표시한다.
사용자 삽입 이미지

Data 확인



다른방법
>>  @user = User.new(:name => "jolaking2",
?>  :login => "jola2",
?>  :password => "jola2",
?>  :registered_on => Date.today)
=> #<User id: nil, name: "jolaking2", login: "jola2", password: "jola2", registe
red_on: "2008-01-21">
>> @user.save
=> true
>>

사용자 삽입 이미지

3. Data Retrieve

?> @user = User.find(1)
=> #<User id: 1, name: "jolaking", login: "jola", password: "jola", registered_o
n: "2008-01-21">
>> @user = User.find(2)
=> #<User id: 2, name: "jolaking2", login: "jola2", password: "jola2", registere
d_on: "2008-01-21">
>> @user = User.find(3)
ActiveRecord::RecordNotFound: Couldn't find User with ID=3
        from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record
/base.rb:1267:in `find_one'
        from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record
/base.rb:1250:in `find_from_ids'
        from c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record
/base.rb:504:in `find'
        from (irb):27
>>

주의할점 registered_on 메소드는 Date객체를 리턴하기 때문에 여기에서는 리턴된 Date 객체의
to_s 메소드를 호출하여 이를 문자열로 반환해야 된다.
find_by_xxxx 사용하기

?> @user = User.find_by_login("jola")
=> #<User id: 1, name: "jolaking", login: "jola", password: "jola", registered_o
n: "2008-01-21">
>> @user = User.find_by_login("jola2")
=> #<User id: 2, name: "jolaking2", login: "jola2", password: "jola2", registere
d_on: "2008-01-21">
>> @user = User.find_by_login("jola3")
=> nil >> 값이 없으면 nil

보다 복잡한 검색조건으로 찾기

?> str = "jola2"
=> "jola2"
>> @user = User.find(:first, :conditions => ["login=?", str])
=> #<User id: 2, name: "jolaking2", login: "jola2", password: "jola2", registere
d_on: "2008-01-21">
>>

여기서 :first는 첫번째 record의 return을 의미하고,
:all로 사용하면 배열로 여러 record를 받는다.

2가지 조건 이상 사용하면 다음과 같이 사용한다.
?> @user = User.find(:first, :conditions => ["login=? AND password=?" , "jola","jola"])
=> #<User id: 1, name: "jolaking", login: "jola", password: "jola", registered_on: "2008-01-21">


이쯤에서 사용되는 옵션을 정리하면
:first or :all = 첫번째 또는 전체
:conditions = Where 조건절 기술
:order        = 정렬방식
:limit          = 불러올 Record갯수
:offset        = 지정된 숫자만큼 레코드를 건너뛰고, 그다음부터 리턴
:readonly    = 리턴되는 레코드를 읽기 전용으로 만듦

conditions에 like 문을 사용하고자 한다면
:conditions = > ["login like ?", query + "%"]

직접 SQL문 입력가능

@group = Group.find_by_sql("SELECT ..... FROM aaa WHERE....");

다음에서 group값을 사용하고자 하면
@group[0].name 이런식으로
사용해야 된다.