Html 将数据从视图表单传输到模型方法

Html 将数据从视图表单传输到模型方法,html,ruby-on-rails,ruby,model-view-controller,Html,Ruby On Rails,Ruby,Model View Controller,我正在RoR上构建一个tic-tac-toe游戏。现在,整个棋盘都被设置好了,下面有一个跟踪移动的表格。有人告诉我要用这个模型来判断是否有赢家(三连胜)、平局(满局)等等。我以为我有,但显然没有。不确定模型中的players方法有什么问题 show.html.erb: <div id="board" align = center> <table> <tr> <td data-position="0" class="square &

我正在RoR上构建一个tic-tac-toe游戏。现在,整个棋盘都被设置好了,下面有一个跟踪移动的表格。有人告诉我要用这个模型来判断是否有赢家(三连胜)、平局(满局)等等。我以为我有,但显然没有。不确定模型中的
players
方法有什么问题

show.html.erb

<div id="board" align = center>
  <table>
    <tr>
      <td data-position="0" class="square <%= class_for_move(0)%>"></td>
      <td data-position="1" class="square v <%= class_for_move(1)%>"></td>
      <td data-position="2" class="square <%= class_for_move(2)%>"></td>
    </tr>
    <tr>
      <td data-position="3" class="square h <%= class_for_move(3)%>"></td>
      <td data-position="4" class="square v h <%= class_for_move(4)%>"></td>
      <td data-position="5" class="square h <%= class_for_move(5)%>"></td>
    </tr>
    <tr>
      <td data-position="6" class="square <%= class_for_move(6)%>"></td>
      <td data-position="7" class="square v <%= class_for_move(7)%>"></td>
      <td data-position="8" class="square <%= class_for_move(8)%>"></td>
    </tr>
  </table>
</div>

<table>
  <tr>
    <td><%= @game.player_1 %></td>
    <td><%= @game.player_2 %></td>
  </tr>
  <tr>
    <td>X</td>
    <td>O</td>
  </tr>
</table>

<%= link_to "Play Again", games_path %>

<%= nested_form_for @game do |f| %>

  <%= f.fields_for :moves do |move_form| %>
    <div id="table" data-current-player="<%=session[:current_player] %>">
      <%= move_form.label :position %><br>
      <%= move_form.text_field :player, data: {position: move_form.object.position} %>
      <%= move_form.hidden_field :id %>
    </div>
  <% end %>

<input type="Submit">
<% end %>
class Game < ActiveRecord::Base
  has_many :moves
  after_create :initialize_moves
  accepts_nested_attributes_for :moves

  def initialize_moves
    9.times do |i|
      Move.create(position: i, game:self)
    end
  end

  def players(number)
    move = moves.find_by(position: number)
    player = move.player
  end

  def tie?
  end

  def winner?
     if players(0) == players(1) && players(1) == players(2)
      return players(0)
    end
  end

end
游戏\u控制器

class GamesController < ApplicationController

  def create
    @game = Game.new(game_params)
    @game.save
    redirect_to @game
  end

  def update
    @game = Game.find(params[:id])
    @game.update(game_params)
    if @game.tie?
      flash[:error] = "Game over. 'Tis a tie."
    elsif @game.winner?
      flash[:notice] = "Winner is #{session[:current_player]}"
    else
      switch_player
    end
    redirect_to @game
  end

  def show
    @game = Game.find(params[:id])
  end

  def switch_player
    session[:current_player] = session[:current_player] == "X" ? "O" : "X"
  end

  private
  def game_params
    params.require(:game).permit(:player_1, :player_2, moves_attributes: [:player, :id])
  end

end
class GamesController
当我运行我目前拥有的游戏时,游戏将一直进行到我有一个三人一排(目前只做0、1、2号槽的测试),切换玩家并表现正常。当“三连胜”为真时,无论当前玩家是什么,它都会保持不变,并且不会切换。这不是游戏的结束,也不是给我即时通知。只需坚持当前玩家。如果我尝试添加一个elsif,尝试放入另一个赢球位置组合,也会出现同样的情况

我意识到这可能是一些初级的东西,但我似乎无法理解,而且到目前为止还没有在网上找到任何有用的东西。而且,如果
如果
语句路线不正确,我愿意走另一条路。我现在想不出别的办法


非常感谢您的帮助。

解决了这个问题。只需使用
设置
赢家?
方法中的每个组合!玩家(0)。空白&&。在
=
之后为每个
玩家提供相应的编号


我打算删除这个问题,但万一有人真的对答案感到好奇,答案就在这里。

我用不同的信息设置了一个新问题,这样就不会让网站充斥着几乎相同的问题。有点像。。。不过看起来你正在进步。祝你好运,它会随着时间的推移而变得不那么混乱。是的,不要删除它,也许有人带着类似的问题来到这里。