내 사이트의 옵션을 저장하기위한 두 가지 속성 이름과 값을 갖는 변수 모델을 만듭니다. 내가 알고 싶은 것은 레일스가 데이터 타입을 읽은 후 또는 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
내가 시도한 것으로부터 int 형식을 검색 할 수없고 형식으로 사용할 수 없습니다. Variable.create (: name => 'int', : value => 123) 및 Variable.find_by_name ('int'). value를 사용합니다. 그것은 123 "123"반환하지 않습니다. 그 후 serialize 시도 : 값,하지만 아무것도 복잡한 둘 다 복잡하지 않습니다. – sarunw
거기에 문제가 귀하의 데이터베이스 필드에 숫자 형식 (정수/소수점/부동 소수점 등)이 아닙니다. 당신이 데이터 구조를 다루지 않는다면 직렬화는 어떤 일도하지 않을 것입니다. 사물이 항상 같은 방식으로 해석되도록 ActiveRecord :: Base # Serialzie에 객체 인수를 제공하는 것을 고려할 수도 있습니다. – EmFi
데이터베이스 필드를 int, float, string, array, hash와 같은 변수 홀더로 사용할 의도로 텍스트로 사용했습니다. 처음에 serialize는 PHP에서 serialize하고 unserialize하는 것과 같을 것이라고 생각하지만 그렇지 않습니다. 나는 마샬을 시도했지만 sqlite는 "인식 할 수없는 토큰"이라는 오류를 보여줍니다. 무엇을 해야할지 모르겠다. – sarunw