2012-07-26 3 views
1

내 Rails 앱에는 previous_node_id 및 next_node_id 열의 ID를 입력하여 서로를 가리킬 수있는 노드가 있습니다. 노드를 만들면 이전 노드로 성공적으로 가리 키지 만 이전 노드는 변경되지 않고 next_node_id 값은 nil로 유지됩니다. 이 문제를 어떻게 해결할 수 있습니까? (나는 또한 코드를 개선하는 방법에 대한 의견을 주셔서 감사합니다.)이 컨트롤러 코드는 하나의 노드를 만들 수 있지만 다른 노드를 편집 할 수없는 이유는 무엇입니까?

NodesController :

def create 
@node = current_user.nodes.build(params[:node]) 

if params[:previous_node_id].present? 
setup_node_pointers(Node.find(params[:previous_node_id]), @node) 
end 

if @node.save 
...//end of the controller 

관련 코드를 도우미에서 :

def setup_node_pointers(previous_node, current_node) 
    previous_node.next_node_id = current_node.id 
    current_node.previous_node_id = previous_node.id 
    previous_node.save 
end 

답변

1

current_node.id이 전무하기 때문이다. build 명령은 id@node에 할당되지 않도록 레코드를 db에 저장하지 않습니다. 도우미에게 전화하기 전에 @node을 저장하면 제대로 작동합니다. 저장을 위해 유효성 검사를 거치지 않으려면 @node.save(validate: false)

+0

감사합니다.하지만 이전에 저장 한 후에도 여전히 작동하지 않습니다. –

+0

@ user29358 다른 문제가 무엇인지 알 수 없습니다. 어쩌면 당신의 구원이 실패하고 있을까요? 당신이 받고있는 오류와 당신의 모델이 어떤 모습인지 보여주십시오. 또한 콘솔에서 작업을 시도해보십시오. 작동하지 않는 경우 도우미에게 문의하십시오. – Steve

+0

다른 오류를 발견했습니다. 몇 가지가 있습니다. –

1

놀라운 코드에 몇 가지 오류가 있었습니까? previous_node_id는 노드 PARAMS의 일부, 그래서 컨트롤러에서 도우미를 호출 할 수 없습니다 params[:node][:previous_node_id]

  • 을 했어야 :

    1. 필요는 (스티브의 답변을 참조)
    2. 현재 노드 1을 저장합니다. current_node가 초기 빌드에서 설정되었으므로
    3. 일부 도우미 코드가 중복되어 혼동을 일으 킵니다.
  • +0

    좋았어, # 3 sry 내가 그것을 놓친 걸 봤어야 했어. – Steve

    관련 문제