在我的Rails应用程序中,有些节点可以通过填写其previous_node_id和next_node_id列的id来指向彼此。当我创建一个节点时,它成功地指向上一个节点,但前一个节点没有改变,其next_node_id值仍为零。我该如何解决? (我也很感激有关如何改进代码的任何意见。)
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
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
答案 0 :(得分:1)
这是因为current_node.id
是零。 build
命令不会将记录保存到数据库,因此没有id
分配给@node
。在打电话给帮助者之前保存@node
,它应该有效。如果您需要绕过验证进行保存,请执行@node.save(validate: false)
答案 1 :(得分:1)
令人惊讶的是,这么少的代码中出现了多少错误!
params[:node][:previous_node_id]