【问题标题】:Setting a default value to a blank form in html.(Ruby, Sinatra, CSS)将默认值设置为 html 中的空白表单。(Ruby、Sinatra、CSS)
【发布时间】:2016-05-02 03:16:53
【问题描述】:

我对 html 非常陌生,并且有基本的了解,还不能使用 java 查询或 javascript。我试图让玩家选择填写玩家 2 的姓名字段以扮演朋友,或者将其留空以在摇滚、纸、剪刀的基本游戏中玩电脑。我希望如果该字段留空,则参数不会传递任何内容,并且默认值将在我的 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。谢谢

【问题讨论】:

    标签: html css ruby sinatra


    【解决方案1】:

    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
    

    【讨论】:

    • 效果很好,谢谢!关于为什么我在初始化中的默认值不起作用的任何见解?
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多