Ruby on rails 在更新操作中实现captue逻辑方法

Ruby on rails 在更新操作中实现captue逻辑方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我目前正在开发一个国际象棋应用程序,我正试图找出如何实现移动到!方法,该方法执行捕获逻辑,以在控制器上的更新操作中发生。我遇到的问题是,我甚至不知道如何调用该方法。我需要在控制器或..中重写整个更新操作吗 以下是更新操作: def update @highlighted_piece = Piece.find(params[:id]) @game = @highlighted_piece.game @x_pos = params[:piece][:x_position] @y_p

我目前正在开发一个国际象棋应用程序,我正试图找出如何实现移动到!方法,该方法执行捕获逻辑,以在控制器上的更新操作中发生。我遇到的问题是,我甚至不知道如何调用该方法。我需要在控制器或..中重写整个更新操作吗

以下是更新操作:

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
以下是捕获逻辑:

捕获逻辑
我想我可以打电话给move_to!在我的@highlighted_作品中,但它似乎没有任何作用。

移动到工件
类的实例方法放置,则code>应该可以工作


但是我发现错误的是
else
部分到
if-Piece.where(x_u…
使其忽略空插槽的移动。我的意思是说,在new_x和new_y没有放置工件,那么您应该能够将工件移动到空位置,对吗?但是
其他部分只会使它看起来好像什么都没有发生。这应该是原因。

就是这样。我不敢相信我没有注意到这一点t、 当我真的捕捉到一个片段时,它就起作用了,但当我像你说的那样移动到一个空的正方形时,它就不起作用了。谢谢你。好吧,移动到回答。实际上我先输入了答案。但我只是想通过评论来确认它,因为我想也许你真的计划让它像那样移动(捕捉逻辑呵呵)。
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