2014-11-27 3 views
0

내가 ID레일 마이그레이션은 update_attributes 기능은 예를 들어</p> <p>을 실패 여기서

def change 
    create_table :tests, id:false do |t| 
    ...... 
end 

없이 테이블을 작성 레일

4.1.6 잠재적 버그 설명 버그 update_attributes 콘솔의 경우

> a=Test.first 
=> #<Test symbol: "ABC", month: 3, year: 14> 
> b={"symbol"=>"EFG", "month"=>"4", "year"=>"15"} 
.... 
> a.update_attributes(b) 
TypeError: nil is not a symbol 
....... 

자세한 내용은 테스트에 자동으로 삽입 된 추가 필드 "nil => nil". 예 :

> a.attributes 
=> {"symbol"=>"ABC", "month"=>3, "year"=>14, nil=>nil} 

nil => nil 필드도 새 레코드의 속성에서 생성되었습니다. 예 :

> b=Test.new 
=> #<Test symbol: nil, month: nil, year: nil> 
> b.attributes 
=> {"symbol"=>nil, "month"=>nil, "year"=>nil, nil=>nil} 

BYW, 저는 mysql을 사용하고 있습니다. id : false가 제거 된 경우 위의 문제가 존재하지 않습니다.

+0

왜 ID를 삭제 했습니까? 하나의 필드에 대해 일종의 고유 한 식별자가 필요하며, ID가 아닌 경우 레일스에 알려줘야합니다. – sevenseacat

+0

데이터베이스를 자주 업데이트하기 때문에. id 열은 나에게 의미가없는 매우 큰 숫자로 끝납니다. – user1143669

답변

1

레일스가 올바르게 작동하려면 관련 테이블에 기본 키가 있어야합니다. 필드 (예 : symbol 필드) 또는 필드 세트를 기본 키로 설정하는 마이그레이션을 작성하면 코드가 평소와 같이 작동합니다.

+0

아직 시도하지 않았지만 이것은 합리적인 대답처럼 들립니다. – user1143669