html - 将默认值设置为 html 中的空白表单。(Ruby、Sinatra、CSS)

标签 html css ruby sinatra

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

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

Controller :

  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] 有一个空字符串 "" 作为值。所以,你实际上是将一个空字符串传递给你的构造函数。那就是不使用“默认值”。如果你想使用默认值,那么你必须省略一个参数,像这样:

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

关于html - 将默认值设置为 html 中的空白表单。(Ruby、Sinatra、CSS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970679/

相关文章:

javascript - 我想使用 HTML Get 更改 iframe 源

javascript - JQuery 设置 Div 样式 After Effect

html - 即使隐藏,导航子菜单也会覆盖其下方的链接/内容

arrays - 数组加法,为什么从 'i = 2' 开始?

html - 隐藏 div 中的固定表格 td 宽度

html - 实现浏览器的 'Download to Computer'功能

ruby - 在 Sinatra 中缓存响应的最佳方式?

ruby - 简单的 Ruby 正则表达式问题

html - 在页脚内水平放置 3 个 div

javascript - 下拉内容、按钮和标题不并排