2010-12-01 2 views
0

Rails에 연관이있는 레코드를 업데이트 할 수 없습니다.Rails에 연관이있는 레코드를 업데이트 할 때 문제가 발생했습니다.

예를 들어 Post 모델과 User 모델이 있습니다. post.rb에서 나는 협회 belongs_to :user을 포함 시켰습니다.

기존 게시물 레코드의 user_id 필드를 변경하려는 경우 작동하지 않습니다.

p = Post.find(1) 
p.user_id = 5 
p.save 

위의 내용은 포스트 레코드의 user_id 필드를 5로 변경하지 않습니다. 연결을 제거하면 위의 코드가 작동합니다.

연결을 제거하지 않고 user_id 필드를 업데이트하는 방법이 있습니까?

감사합니다.

이 작업을 수행하는 "올바른"방법은 다음과 같이 레일, 모든 무거운 리프팅을 할 수 있도록하는 것입니다
+0

ID를 직접 할당하는 것이 일반적이지는 않지만이 방법도 사용할 수 있습니다. 오류 메시지가 나타 납니까? – zetetic

+0

id = 5 인 사용자가 있습니까? – hade

+0

예, ID가 5 인 사용자가 존재합니다. 오류 메시지가 표시되지 않습니다. 콘솔에서이 작업을 시도하면 사실입니다. 그러나 user_id는 변경되지 않습니다. – Tim

답변

1

당신이 쓴 : 그들이 작동해야처럼

이러한 예는 보이지만 어떤 이유로 USER_ID가 변경되지 않습니다. 후자는 상승하는 반면 아마, "save!"

유효성 검증가 실패하면 전 그냥 false를 반환과 "save"을 대체하여 쉽게이 검증 때문인지 확인할 수 있습니다

유효성 검증과 함께 할 수있는 뭔가가 예외 :

>> p = Post.find(1) 
... 
>> p.user = User.find(5) 
... 
>> p.valid? 
... 
>> # will be either true or false, depending on validations 
>> p.errors.full_messages 
... 
>> # will be either [] or else a non-empty array of all validation failures 
>> _ 
: 또는

p = Post.find(1) 
p.user = User.find(5) 
p.save! 

은 또한 레일 콘솔에서 다음을 수행 할 수 있습니다

행운을 빈다!

1

: 모든 검증을 가정 작동합니다

p = Post.find(1) 
p.user = User.find(5) 
p.save 

이 ..., 충족 .

또는

:

Post.find(1).update_attribute(:user_id, 5) 

... 당신은 아마 후자를 사용하기 전에 두 번 생각하고 싶지 않지만! :-)

피터

+0

답변 해 주셔서 감사합니다. 이 예제는 작동해야하지만, 어떤 이유로 든 user_id는 변경되지 않은 상태로 유지됩니다. 어쩌면 검증과 관련이있을 수 있습니다. – Tim

관련 문제