为什么这个Controller代码能够创建一个节点而不能编辑另一个节点?

时间:2012-07-26 03:10:06

标签: ruby-on-rails ruby-on-rails-3 controller

在我的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

2 个答案:

答案 0 :(得分:1)

这是因为current_node.id是零。 build命令不会将记录保存到数据库,因此没有id分配给@node。在打电话给帮助者之前保存@node,它应该有效。如果您需要绕过验证进行保存,请执行@node.save(validate: false)

答案 1 :(得分:1)

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

  1. 需要保存当前节点1(请参阅Steve的回答)
  2. :previous_node_id是节点参数的一部分,所以应该是 params[:node][:previous_node_id]
  3. 无法从控制器调用助手。 current_node是在初始构建中设置的,所以
  4. 一些帮助程序代码是多余的,导致混淆。