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 - IE中文本框的文本缩进

javascript - 如何防止 iframe 捕获页面的背景颜色?

javascript - 更改所有 <hr> html 元素的属性

ruby - DataMapper 一对多删除失败

python - 将 XML 数据与来自 XML 模式的数据类型信息相结合

html - 验证错误时 ASP.NET MVC5 文本区域未以红色标出

html - 在背景图像上应用不透明度滤镜?

javascript - 如何在滑动悬停 jquery 中设置属性 =' data-fancybox-group'

css - 一张图片在 CSS 中的另一张图片下方

ruby-on-rails - Ruby/Rails 转换为字符串错误