1

在我的 Rails 应用程序中,有一些节点可以通过填写其 previous_node_id 和 next_node_id 列的 id 来指向彼此。当我创建一个节点时,它成功地指向了前一个节点,但前一个节点并没有改变,它的 next_node_id 值仍然为零。我该如何解决?(我也会感谢任何关于如何改进代码的评论。)

节点控制器:

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

来自 Helper 的相关代码:

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

令人惊讶的是,这么少的代码中有多少错误!

  1. 需要保存当前节点 1st(见史蒂夫的回答)
  2. :previous_node_id 是节点参数的一部分,所以它应该是 params[:node][:previous_node_id]
  3. 无法从控制器调用助手。current_node 是在初始构建中设置的,所以
  4. 一些帮助代码是多余的,导致混乱。
于 2012-07-26T14:59:54.857 回答
1

这是因为current_node.id是零。该build命令不会将记录保存到数据库,因此没有id分配给@node. @node在调用助手之前保存,它应该可以工作。如果您需要绕过验证来保存它,请执行@node.save(validate: false)

于 2012-07-26T03:50:00.683 回答