将captue逻辑方法实现为更新操作

时间:2015-06-06 13:26:26

标签: ruby-on-rails ruby

我目前正在研究国际象棋应用程序,我正在努力弄清楚如何实现move_to!执行捕获逻辑的方法,发生在控制器上的更新操作中。我遇到的问题是我不确定如何调用该方法。我是否需要在控制器中重写整个更新操作或..?

以下是更新操作:

def update 
  @highlighted_piece = Piece.find(params[:id])
  @game = @highlighted_piece.game
  @x_pos = params[:piece][:x_position]
  @y_pos = params[:piece][:y_position]
  @highlighted_piece.update_attributes({ x_position: @x_pos, y_position: @y_pos})
  redirect_to @game
end

这是捕获逻辑:

捕获逻辑

def move_to!(new_x, new_y)
    if Piece.where(x_position: new_x, y_position: new_y).exists?
        newpiece = Piece.find_by(x_position: new_x, y_position: new_y)
        if self.color != newpiece.color
            #perform capture
            newpiece.update_attributes(:x_position => nil, :y_position => nil)
        else
            return false
        end
    else
        return false
    end
    if self.update_attributes(:x_position => new_x, :y_position => new_y)
        @has_moved = true
    end
end

我以为我可以打电话给move_to!在我的@highlighted_piece上,但它似乎没有做任何事情。

1 个答案:

答案 0 :(得分:0)

move_to!如果将其作为Piece类的实例方法放置,则应该有效。

但我发现错误的是else部分到if Piece.where(x_ ...会使其忽略空插槽的移动。我的意思是说在new_x和new_y上没有放置任何部分,那么你应该能够将这个部分移动到空位置吗?但else部分只是让它看起来没有发生任何事情。这应该是原因。