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
4

2 に答える 2

1

これはcurrent_node.idが nil であるためです。コマンドはbuildレコードをデータベースに保存しないため、にid割り当てられていません@node@nodeヘルパーを呼び出す前に保存すると、機能するはずです。保存するために検証をバイパスする必要がある場合は、@node.save(validate: false)

于 2012-07-26T03:50:00.683 に答える
1

ごくわずかなコードに、驚くほど多くのエラーがありました。

  1. 現在のノードを最初に保存する必要があります(スティーブの回答を参照)
  2. :previous_node_id はノード パラメータの一部だったので、 params[:node][:previous_node_id]
  3. コントローラーからヘルパーを呼び出すことはできません。current_node は最初のビルドでセットアップされたので、
  4. ヘルパー コードの一部が冗長で、混乱を招いていました。
于 2012-07-26T14:59:54.857 に答える