nil 클래스에 대해 undefined에 대한 오류가 발생할 때마다 문제가 호출하는 메소드가 아니라 메소드를 호출하는 변수라는 사실을 즉시 알 수 있습니다. 즉, nil
에는 update
메소드가 없으므로 포커스는 실제로는 nil 인 변수에 있어야합니다. 여기에 질문 : invite
이 관계 대신 nil
을 반환하는 이유는 무엇입니까?
관계를 만드는 데 사용자 지정 클래스 메서드를 사용하고 있으므로 올바른 개체를 반환하지 않는다고 추측합니다. 다음과 같이 표시되어야합니다.
def self.create_invitation(event, user, something_else = nil)
rel = InvitationRel.new(from_node: event, to_node: user)
if rel.save
rel
else
# return an error, maybe rel.errors.full_messages?
end
end
그런 다음 컨트롤러가 실제로 연결이 올바르게 생성되었는지 확인해야합니다.
event = Event.find(params[:event])
invite = Invite.create_invitation(event, current_user, nil) #creates relationship
if invite.neo_id.nil?
# the rel did not create correctly, neo_id is only present on persisted objects
else
invite.update(interested: params[:interest])
end
이 문제를 해결하는 데 많은 도움이되는 것처럼 느껴집니다. 당신은 관계의 생성을 분리하고 interested
속성을 설정 할 필요가 없습니다, 당신은 DB에 하나의 호출에 그것을 할 만 할 수
event = Event.find(params[:event])
invite = InviteRel.new(from_node: event, to_node: current_user, interested: params[:interest])
if invite.save?
# rel was created, move on
else
# something wrong in the rel, figure out what it was
end
당신은 당신이 항상 interested
속성을 만들거야 알고 있기 때문에 이 속성은 모델에 유효성 검사를 추가하여 속성이 항상 만들어 지도록 설정하는 것이 좋습니다.
감사합니다. chris. 일반적으로 Ruby는 마지막 객체를 반환합니다. 'InvitationRel.new (from_node : event, to_node : user) .save'가 있으면 관계 객체가 반환되지 않는 이유가 궁금합니다. 왜 명시 적으로 반환해야합니까? 창조물에 내가 알지 못하는 미묘한 부분이 있습니까? – Clam
'save'는 호출 된 객체를 반환하지 않으며, 객체가 성공적으로 저장되었는지 아닌지에 대한 부울을 반환합니다. 'create'는 객체를 리턴하지만 성공했는지 여부를 알려주지 않습니다. 그래서 당신은'obj.save then do_this else do_that end' 패턴을 볼 수 있습니다. – subvertallchris