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/

相关文章:

html - 透明、无边框的文本输入

javascript - 如何将在 javascript 中创建的数组传递给另一个 jsp,然后在该 jsp 的 java 函数中使用该数组?

css - Bootstrap 3支持的最小宽度是多少?

ruby - 如何使用 rails 仅查找 google 加一计数(不需要按钮和 g +1 图像)

javascript - 使用 javascript 打印带有文本字段的 div 内容时遇到问题?

javascript - 如何在 fullpage.js 幻灯片上居中 div?

javascript - 多个动画之间的 CSS 动画进度

javascript - Angular 路由无法正常工作

ruby - 如何区分没有颜色的像素和黑色像素?

javascript - 我希望创建一个特定的下拉菜单(包括示例)