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

时间:2016-05-01 18:57:59

标签: html css ruby sinatra

我是非常新的HTML和基本的理解,不能使用Java查询或JavaScript。我试图让玩家选择填写玩家2名称字段来玩朋友或留空以在摇滚,纸张,剪刀的基本游戏中玩电脑。我希望如果该字段留空,那么param将不会传递任何内容,并且默认值将在我的Player类中设置。

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>

红宝石:

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。感谢

1 个答案:

答案 0 :(得分:0)

params[:name]params[:name2]有一个空字符串""作为值。所以,你实际上是将一个空字符串传递给你的构造函数。那是&#34;默认值&#34;未使用。如果要使用默认值,则必须省略一个参数,如下所示:

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