在 html.(Ruby, Sinatra, CSS) 中将默认值设置为空白表单

Setting a default value to a blank form in html.(Ruby, Sinatra, CSS)

我是 html 的新手,有基本的了解,还不会使用 java 查询或 java 脚本。我正在尝试让玩家选择填写玩家 2 名称字段以玩朋友或将其留空以在石头剪刀布的基本游戏中玩计算机。我希望如果该字段留空,则参数将不传递任何内容,并且将在我的播放器 Class 中设置默认值。

Html:

<form id="name_form" action="/name" method="post">
  <label for="name" id="name_label">Enter Player Name:</label>
  <input type="text" id="player_name" name="name" >
  <label for "name" id="name_label"> Second Player Name:</label>
  <input type="text" id="player_name" name="name2" >
  <input type="submit" value="Play!" id="play_button";>
</form>

Ruby:

class Player

  attr_reader :name

  def initialize name = "Computer"

    @name = name

  end

end

控制器:

  post '/name' do
    player = Player.new params[:name]
    player2 = Player.new params[:name2]
    @game = Game.create player, player2
    redirect '/play'
  end

我希望像上面这样的东西能奏效,但我做不到。我错过了什么吗?我还不想使用 javascript。谢谢

params[:name]params[:name2] 有一个空字符串 "" 作为值。所以,你实际上是将一个空字符串传递给你的构造函数。那就是 "default value" 没有被使用。如果你想使用默认值,那么你必须省略一个参数,像这样:

Player.new
# => #<Player:0x007f9c5116b698 @name="Computer">

此外,请注意,传递 nil 仍意味着您传递的参数值为 nil,并且不会选择默认值

Player.new
# => #<Player:0x007f9c5116b698 @name=nil>

这就是为什么您需要将代码更新为:

class Player
  attr_reader :name

  def initialize name
    @name = name.empty? ? "Computer" : name
  end
end