2009-12-12 4 views
0

내 사이트의 옵션을 저장하기위한 두 가지 속성 이름과 값을 갖는 변수 모델을 만듭니다. 내가 알고 싶은 것은 레일스가 데이터 타입을 읽은 후 또는 db에 쓰기 전에 레일즈가 데이터 타입을 인식하도록 serialize하는 것과 같은 특별한 메소드가 필요합니까?레일에서 데이터베이스의 데이터 유형을 인식하도록하는 특별한 방법이 필요합니까?

serialize없이 시도해 보겠습니다. 값은 데이터 유형 작업 만 배열 해시 및 문자열이며 나머지는 그렇지 않습니다. 모든 작업이 정상적으로 작동하지만 실제로 작동합니까? 그렇다면 왜 레일에이 방법이 있습니까? serialize 방법.

는 액티브 모델에 대한 속성으로 데이터베이스에 객체를 저장할 때

class CreateVariables < ActiveRecord::Migration 
    def self.up 
    create_table :variables do |t| 
     t.string :name 
     t.text :value 

     t.timestamps 
    end 

    add_index :variables, :name, :unique => true 
    end 

    def self.down 
    drop_table :variables 
    end 
end 

class Variable < ActiveRecord::Base 


    validates_uniqueness_of :name 
    validates_presence_of :name, :value 

end 

답변

0

직렬화는 필요 내 코드입니다.

변수 테이블에 대한 막연한 설명에서 직렬화가 필요하지 않습니다. String, Fixnum, Boolean 또는 하위 클래스와 같은 표준 데이터베이스 열 유형에 멋지게 저장하면 속성을 직렬화 할 필요가 없습니다. 이름/값 쌍의 값이 이보다 더 복잡하면 직렬화해야합니다. 예를 들어, 배열, 해시 및 사용자 정의 객체 인 값은 직렬화해야합니다.

serialize 메서드로 지정되면 다른 작업을 수행 할 필요가 없습니다.

+0

내가 시도한 것으로부터 int 형식을 검색 할 수없고 형식으로 사용할 수 없습니다. Variable.create (: name => 'int', : value => 123) 및 Variable.find_by_name ('int'). value를 사용합니다. 그것은 123 "123"반환하지 않습니다. 그 후 serialize 시도 : 값,하지만 아무것도 복잡한 둘 다 복잡하지 않습니다. – sarunw

+0

거기에 문제가 귀하의 데이터베이스 필드에 숫자 형식 (정수/소수점/부동 소수점 등)이 아닙니다. 당신이 데이터 구조를 다루지 않는다면 직렬화는 어떤 일도하지 않을 것입니다. 사물이 항상 같은 방식으로 해석되도록 ActiveRecord :: Base # Serialzie에 객체 인수를 제공하는 것을 고려할 수도 있습니다. – EmFi

+0

데이터베이스 필드를 int, float, string, array, hash와 같은 변수 홀더로 사용할 의도로 텍스트로 사용했습니다. 처음에 serialize는 PHP에서 serialize하고 unserialize하는 것과 같을 것이라고 생각하지만 그렇지 않습니다. 나는 마샬을 시도했지만 sqlite는 "인식 할 수없는 토큰"이라는 오류를 보여줍니다. 무엇을 해야할지 모르겠다. – sarunw

관련 문제