2012-02-21 3 views
3

레일을 처음 사용합니다.레일 3.1 활성 레코드 삽입 또는 업데이트

활성 레코드에 데이터 해시를 전달하는 쉬운 방법이 있습니까? 레코드가 존재하면 업데이트하고 그렇지 않으면 생성하십시오.

data = {} 
data["my_id"] = 356345 
data["description"] = "test123" 

w = Descriptions.new(data) 

위의 내용을 실행하면 이상적으로 하나의 레코드 만 있고, 실행할 때마다 여러 레코드가있는 것이 아닙니다.

+0

이것은 SQL update 또는 insert와 같습니다. – Chloe

답변

11

당신이 레일에서 액티브 오브젝트 ID 매개 변수의 정체성을 유지

Descriptions.find_or_create_by_my_id(data["my_id"]).update_attributes(data) 
+0

'pablo'는 rails에 새롭다. 당신은 패치 방법을 사용하도록 말하고있다! –

+0

여기서 무엇이 잘못되었는지 보지 마십시오. my_id가 기본 키가 아닙니다. 그래서 완전히 괜찮아요. – iltempo

+0

나는 나의 대답을 좋아했다. .. 그것은 레일의 능력을 보여준다. – BananaNeil

0

실행할 수 있습니다 당신은 고유하기 위해 "MY_ID"비트를 원하는 도자기 가정. ID가 설정되면 Rails는 해당 ID로 데이터베이스의 레코드를 업데이트한다는 것을 알게됩니다.

save은 실제로 개체를 데이터베이스에 저장, 업데이트 또는 저장하는 기본 방법입니다. update_attributes과 같은 다른 방법은 코어에 save을 사용하는 설탕 일뿐입니다.

네, 많은 좋은 일들이 당신이 ModelName.find_or_create_by_name("Summer")

을 얻을 것입니다하지만 당신은 갱신 될 것입니다 save 방법으로 ID를 전달하고 경우 ID가 그 것이다 create 데이터를 전달하지 않은 경우.

항상 레일스의 기본 키는 "id"이어야하지만 "my_id"를 사용하면 문제가 될 수 있습니다.

관련 문제