我目前正在研究国际象棋应用程序,我正在努力弄清楚如何实现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上,但它似乎没有做任何事情。
答案 0 :(得分:0)
move_to!
如果将其作为Piece
类的实例方法放置,则应该有效。
但我发现错误的是else
部分到if Piece.where(x_ ...
会使其忽略空插槽的移动。我的意思是说在new_x和new_y上没有放置任何部分,那么你应该能够将这个部分移动到空位置吗?但else
部分只是让它看起来没有发生任何事情。这应该是原因。